我有一个带有面板网格和对话框的表单:
<h:form id="regiForm">
<p:panelGrid>
<p:row style="height:30%">
<p:column>
<h:outputText/>
</p:column>
<p:column>
<p:commandButton style="width:350px" type="submit" actionListener="#
{regiBean.showDialog}" id="ajax" value="#{msg['regi_button']}" update="regiForm" process="@this"/>
</p:column>
<p:column>
</p:column>
</p:row>
</p:panelGrid>
<p:dialog id="dialog" header="#{msg['regi_dialog_header']}" widgetVar="myDialog" position="center center" >
<h:outputText value="#{msg['regi_dialog']}" />
</p:dialog>
</h:form>
我想从动作监听器中打开对话框:
public void showDialog() {
RequestContext.getCurrentInstance().execute("dialog.show()");
RequestContext.getCurrentInstance().execute("myDialog.show()");
}
但是,该对话框未显示。这是怎么造成的,我该如何解决?
我正在使用JSF 2.1和PrimeFaces 3.5。
答案 0 :(得分:3)
使用命令
的第一个语句RequestContext.getCurrentInstance().execute("dialog.show()");
不起作用,因为dialog
引用了p:dialog
组件的XHTML ID。这将导致javascript错误。这可能是第二个命令
RequestContext.getCurrentInstance().execute("myDialog.show()");
不会被执行。
另外,我会在每个Javascript命令的末尾添加;
(但这只是我的个人风格)