从<p:menuitem>链接到某个<p:tab> </p:tab> </p:menuitem>

时间:2014-02-12 13:41:54

标签: jsf primefaces

大家好我想从我的菜单栏链接到某些标签,但总是第一个标签被激活我尝试了很多来自StackOverflow的解决方案,但没有任何效果。我认为问题是我使用preRenderView。我希望有人可以帮助我:)。

我使用jsf 2.1和primefaces 3.5

菜单栏的代码

  <p:menubar >
       <p:submenu  label="Taskbox" >
            <p:menuitem value="Inbox" url="taskbox.xhtml" />
            <p:menuitem value="Sent" url="taskbox.xhtml#sentTab"/>
            <p:menuitem value="Trash" url="taskbox.xhtml" onclick="tabPanel.select(3)"/>
            <p:menuitem value="New Message" url="#"/>
       </p:submenu>          
    </p:menubar>

选项卡的Der代码

<ui:composition template="/META-INF/templates/templateContentSplit.xhtml">

        <ui:define name="metadata">
            <f:metadata>
                <f:event type="preRenderView" listener="#{taskboxBean.initPage}" />
            </f:metadata>
        </ui:define>
<ui:define name="metadata">
            <f:metadata>
                <f:event type="preRenderView" listener="#{taskboxBean.initPage}" />
            </f:metadata>
        </ui:define>

        <ui:define name="title">
            <h:outputText value="Taskbox" />
        </ui:define>
        <ui:define name="contentLeft">
            <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet" />
            <h:form id="postForm">

                <p:tabView id="tabViewPosts" widgetVar="tabPanel">
                    <p:tab title="Inbox" id="inboxTab">
                        <ui:include src="/user/inboxTaskbox.xhtml" />
                    </p:tab>
                    <p:tab title="Sent" id="sentTab">
                        <ui:include src="/user/sentTaskbox.xhtml" />
                    </p:tab>
                    <p:tab title="Trash" id="trashTab">
                        <ui:include src="/user/trashTaskbox.xhtml" />
                    </p:tab>
                </p:tabView>
            </h:form>
        </ui:define>

        <ui:define name="contentRight">
            <h:form id="contentForm">
                <ui:include src="/user/detailTaskbox.xhtml" />
            </h:form>
        </ui:define>

    </ui:composition>

2 个答案:

答案 0 :(得分:4)

对于<p:menuitem />使用outcome属性,该属性指定导航案例,而不是url,该属性旨在与绝对而非JSF相关的网址一起使用。在这里你有一个基本的解释案例,基于@Daniel Camargo建议的代码:

<强> tabs.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<h:head />

<h:body>
    <f:metadata>
        <f:viewParam name="index" value="#{index}" />
        <f:event type="preRenderView" listener="#{bean.initPage}" />
    </f:metadata>

    <h:form>
        <p:menubar>
            <p:submenu label="Taskbox">
                <!-- Different ways of passing the view param -->
                <p:menuitem value="Inbox" outcome="tabs?index=0" />
                <p:menuitem value="Sent" outcome="tabs.xhtml?index=1" />
                <p:menuitem value="Trash" outcome="tabs">
                    <f:param name="index" value="2" />
                </p:menuitem>
                <!-- External url -->
                <p:menuitem value="Google" url="http://www.google.com"
                    target="_blank" />
            </p:submenu>
        </p:menubar>
    </h:form>

    <h:form id="postForm">
        <p:tabView id="tabViewPosts" widgetVar="tabPanel"
            activeIndex="#{index}">
            <p:tab title="Inbox" id="inboxTab">
            A
        </p:tab>
            <p:tab title="Sent" id="sentTab">
            B
        </p:tab>
            <p:tab title="Trash" id="trashTab">
            C
        </p:tab>
        </p:tabView>
    </h:form>
</h:body>
</html>

注意这里的outcome属性让JSF servlet评估目标url。基本上,具有 tabs 值的结果将在客户端呈现为 basePath / tabs.xhtml 。因此,基本上您将页面定向到自身,但更改viewParam值。

另见:

答案 1 :(得分:0)

请记住,这是一个基于零的索引。 tabPanel.select(3)将尝试激活不存在的第4个选项卡。试着这样做:

菜单:

<h:form>
    <p:menubar >
        <p:submenu  label="Taskbox" >
            <p:menuitem value="Trash" url="taskbox.xhtml?index=2"/>
        </p:submenu>          
    </p:menubar>
</h:form>

“任务箱”页面:

<f:metadata>
    <f:viewParam name="index" value="#{viewMBean.index}" />
</f:metadata>

<h:form id="postForm">
    <p:tabView id="tabViewPosts" widgetVar="tabPanel" activeIndex="#{viewMBean.index}">
        <p:tab title="Inbox" id="inboxTab">
            A
        </p:tab>
        <p:tab title="Sent" id="sentTab">
            B
        </p:tab>
        <p:tab title="Trash" id="trashTab">
            C
        </p:tab>
    </p:tabView>
</h:form>