我有一个简单的表[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");
}
答案 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中完成的。
相关: