RequestContext.getCurrentInstance()。更新不立即呈现

时间:2016-10-06 11:17:52

标签: primefaces

我有一个简单的表[form:tabView:remTNtableID],带有一个字符串列表CFSnumbers,当我点击一个按钮时,我调用getTelephoneNumbers()来填充它,这需要一段时间。

我想让表格显示"正在加载.."在等待的同时,为此我清理了清单,添加了#34;正在加载......"到列表,并调用RequestContext.getCurrentInstance()。update(" form:tabView:remTNtableID")。

但是表格没有立即更新,"正在加载.."没有看到,只有当getTelephoneNumbers()呼叫结束时,表格才会更新。

什么了?如何强制表格立即重新渲染?

private List<String> CFSnumbers;

@PostConstruct
public void init() throws GuiException {
    CFSnumbers = new ArrayList<String>();
}

public void getTelephoneNumbers() throws GuiException {
    CFSnumbers.clear();
    CFSnumbers.add("Loading..");
    RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    try {
        ...
        CFSnumbers = ...
        RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    } catch (Exception e) {
        CFSnumbers.clear();
        RequestContext.getCurrentInstance().update("form:tabView:remTNtableID");
    }

1 个答案:

答案 0 :(得分:0)

操作getTelephoneNumbers()是一个请求。当您的方法完全执行时,将执行所有更新(在响应中发送)。

您可以做的是将动作分成重置部分和重载部分。当您单击该按钮时,请调用reset,重置并更新您的表格“正在加载...”。重置完成后,使用remoteCommand启动实际的重载,并在完成后更新表。

所以,在你的XHTML中:

<p:remoteCommand name="getTelephoneNumbersRemoteCommand"
                 action="#{yourBean.getTelephoneNumbers}"
                 update="remTNtableID"/>
<p:commandButton ...
                 action="#{yourBean.preGetTelephoneNumbers}"
                 update="remTNtableID"
                 oncomplete="getTelephoneNumbersRemoteCommand()"/>

在你的bean中:

public void preGetTelephoneNumbers() {
    CFSnumbers.clear();
    CFSnumbers.add("Loading..");
}

public void getTelephoneNumbers() {
    try {
        ...
        CFSnumbers = ...
    } catch (Exception e) {
        CFSnumbers.clear();
    }
}

不再需要从bean更新,因为它是在XHTML中完成的。

相关: