通过RequestContext #cute()</p:dialog>从bean打开<p:dialog>

时间:2013-11-19 14:02:38

标签: jsf primefaces dialog

我有一个带有面板网格和对话框的表单:

<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。

1 个答案:

答案 0 :(得分:3)

使用命令

的第一个语句
RequestContext.getCurrentInstance().execute("dialog.show()");

不起作用,因为dialog引用了p:dialog组件的XHTML ID。这将导致javascript错误。这可能是第二个命令

的原因
RequestContext.getCurrentInstance().execute("myDialog.show()");

不会被执行。 另外,我会在每个Javascript命令的末尾添加;(但这只是我的个人风格)