MenuBar打开一个对话框?

时间:2014-09-01 13:55:34

标签: jsf primefaces

我尝试使用Primefaces 3.5打开一个对话框。我使用MenuBar创建了view.xhtml<p:dialog>。我想将此view.xhtml打开为对话框模式。

我正在使用:JSF2和Primefaces 3.5

我正在尝试这个

<h:form>
        <p:menubar>
            <!-- cadastros -->
            <p:submenu label="Cadastro">
                <p:submenu label="Participantes">
                    <p:menuitem value="Aluno" />
                    <p:menuitem value="Professor"/>
                </p:submenu>
                <p:separator/>                  
                <p:menuitem value="Turma" onclick="#{menuMB.openDialog('/turma/view.xhtml')}"></p:menuitem>             
            </p:submenu>
            <!-- termina cadastros -->

            <!-- relatorios -->
            <p:submenu label="Relatorios">

            </p:submenu>    
        </p:menubar>

    </h:form>

view.xhtml

<p:dialog header="Turmas" appendToBody="false" modal="true" widgetVar="turmaView">
    <h:form>
        <h:outputLabel value="I am a modal" />
    </h:form>
</p:dialog>

托管bean

@ManagedBean
public class MenuMB {

    public void openDialog(String view){
        RequestContext.getCurrentInstance().execute("view.show()");     
    }
}

有什么想法吗?

解决

view.xhtml

<p:dialog header="Turmas" widgetVar="turmaView"  appendToBody="true" modal="true" resizable="false" draggable="false">
    <h:form>
        <h:outputLabel value="I am a modal" />
    </h:form>

</p:dialog>

菜单栏

<h:form>
            <p:menubar>
                <p:submenu label="Cadastro">
                        <p:submenu label="Participante">
                            <p:menuitem value="Aluno"></p:menuitem>
                            <p:menuitem value="Professor"></p:menuitem> 
                        </p:submenu>    
                        <p:separator/>
                        <p:menuitem value="Turma" onclick="PF('turmaView').show()"/>                                    
                </p:submenu>            
            </p:menubar>         
    </h:form>

    <ui:include src="/turma/view.xhtml"/>

现在有效。

1 个答案:

答案 0 :(得分:2)

不可能执行将服务器端方法包装在onclick侦听器或类似的类似物中的服务器端方法。您对客户端javascript函数和服务器端侦听器感到困惑。根据{{​​3}}:

  

MenuItem有两个用例,使用GET直接导航到URL或执行POST来执行操作。

所以没有办法将它用于客户端特定用途,因为它会执行一个请求。你可以做的是在事件发生后显示对话框:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
    <h:form>
        <p:menubar>
            <p:menuitem value="Turma" oncomplete="dlg.show();" />
        </p:menubar>
        <p:dialog header="Modal Dialog" widgetVar="dlg" modal="true"
            height="100">
            <h:outputText value="This is a Modal Dialog." />
        </p:dialog>
    </h:form>
</h:body>
</html>

单击p:menuItem时,会正确显示对话框。执行没有侦听器的ajax请求,当它完成时,显示它的javascript代码将运行。