【发布时间】:2013-04-23 15:49:50
【问题描述】:
我有一个选项卡视图,每当用户选择该选项卡时,我想在其中刷新一个特定选项卡的内容。我还希望在刷新选项卡时弹出模式对话框。
这是带有 tabChange ajax 事件处理程序的 tabView
<p:dialog widgetVar="statusDialog" modal="true" draggable="false" minimizable="false" appendToBody="true" closable="false" header="Processing..." resizable="false" maximizable="false">
<p:graphicImage library="assets" name="ajax-loader.gif"></p:graphicImage>
</p:dialog>
<p:tabView id="tabview" orientation="top" dynamic="false">
<p:ajax event="tabChange" listener="#{bean.tabChangeListener}"></p:ajax>
<p:tab title="tab1">
<ui:include src="/WEB-INF/views/tab1.xhtml"/>
</p:tab>
<p:tab title="tab2">
<p:remoteCommand actionListener="#{bean.refreshData}" update="someTab2ElementID" name="refresh" global="true" onstart="statusDialog.show()" oncomplete="statusDialog.hide()"/>
<ui:include src="/WEB-INF/views/tab2.xhtml"/>
</p:tab>
</p:tabView>
这里是tabChangeListener:
public void tabChangeListener(TabChangeEvent event) {
if ( event.getTab().getId().equalsIgnoreCase("tab2") ) {
RequestContext.getCurrentInstance().execute("refresh()");
}
}
按预期调用刷新 remoteCommand,但我的 statusDialog 从未显示。如果按钮触发了相同的 remoteCommand,则单击 statusDialog 会出现。 JavaScript 控制台中没有错误。
为什么当remoteCommand 被RequestContext.execute() 触发时statusDialog 不显示,我怎样才能让它出现?我什至尝试将 statusDialog.show() 添加到 execute() 但它没有帮助。
【问题讨论】:
-
你能试试
<p:ajax event="tabChange" listener="#{bean.tabChangeListener}" oncomplete="statusDialog.show();"></p:ajax>吗? -
这将导致 statusDialog 显示在所有选项卡更改上。我只希望它在选择一个特定选项卡时显示。
标签: jsf jsf-2 primefaces