使用<p:menuitem> </p:menuitem>进行PrimeFaces模板导航

时间:2014-05-02 16:31:12

标签: jsf primefaces navigation menuitem

我已经在stackoverflow上读了几个关于这个问题的线程,但我还没有找到解决方案。

在我的index.xhtml模板中,我定义了一个导航和一个内容layoutUnit。 菜单是基本的<p:menu>菜单。

使用其他网站填写内容面板,例如使用<p:commandButton>的page1.xhtml效果很好。 <p:menuItem>导航无效。我尝试过设置ajax="false",将action更改为actionListener。无济于事。秘密在哪里? :)

的index.xhtml:

<h:body>
    <p:layout fullPage="true">
        <p:layoutUnit position="north" size="50" id="top">
            <h:form>
                <ui:include src="/template/header.xhtml" />
            </h:form>
        </p:layoutUnit>
        <p:layoutUnit position="south" size="50">
            <h:form>
                <ui:include src="/template/footer.xhtml" />
            </h:form>
        </p:layoutUnit>
        <p:layoutUnit position="west" size="350" >
            <h:form>
                <ui:include src="/template/mainmenu.xhtml" />
            </h:form>
        </p:layoutUnit>
        <p:layoutUnit position="center" >
            <h:panelGroup id="contentPanel">
                <ui:include src="#{navController.pageName}.xhtml" />
            </h:panelGroup>
        </p:layoutUnit>
    </p:layout>
</h:body>

mainmenu.xhtml:

<h:body>
    <h:form id="formMainMenu">      

            <p:menu>            
                <p:submenu label="Menu">
                    <p:menuitem value="Link I" action="#{navController.navigateTo}" ajax="false" update=":contentPanel" icon="ui-icon-disk">
                        <f:param name="navParam" value="/pages/page1" />
                    </p:menuitem>
                </p:submenu>
            </p:menu>

这项工作:                                                       

            <p:commandButton value="Link I" action="#{navController.navigateTo}" update=":contentPanel">
                <f:param name="navParam" value="/pages/page1" />
            </p:commandButton>

    </h:form>
</h:body>

navController导航方法:

public void navigateTo() 
{
     String target = acesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("navParam");
     setPageName(target);
}

1 个答案:

答案 0 :(得分:0)

Question edit converted to an answer

OP写道:

  嗯..似乎即使是基本的actionListener喜欢

<p:menuitem value="Display Message" actionListener="#{navController.message}" update="messages" icon="ui-icon-disk" />
     

未被调用。我处于调试模式,它从不跳转到消息方法:/当我把它放到<p:commandButton>时,它才能正常工作..

     actionListener上的{p> menuItem适用于直接运行actionListener="#{navController.message}"的基本mainmenu.xhtml - 而不是index.xhtml

     

我终于通过从<h:form id="formMainMenu"> </h:form>删除mainmenu.xhtml标记来解决问题。

     

解释为什么这适用于commandButton但不适用于menuItem会很棒!谢谢!