Primefaces tabview:在标签更改上设置活动索引

Vir*_*nie 7 ajax primefaces jsf-2

我有一个包含两个选项卡的选项卡视图.

当我从选项卡1切换到选项卡2时,我正在调用一些执行验证并更新某些值的代码.根据此验证的结果,我希望保留在选项卡1上,或转到选项卡2,并刷新选项卡的内容.

我的tabview:

<h:form id="form"> 
    <p:tabView id="tabview" activeIndex="#{ctrl.idx}" dynamic="true" cache="false">  
        <p:ajax event="tabChange" listener="#{ctrl.doStuff}" update=":form:tabview"/>
        <p:tab title="Tab 1" id="t1">  
            <h:panelGrid columns="1" cellpadding="10">
                <h:outputText value="#{ctrl.s1}"/>
            </h:panelGrid>  
        </p:tab>  
        <p:tab title="Tab 2" id="t2">  
            <h:panelGrid columns="1" cellpadding="10">
                <h:outputText value="#{ctrl.s2}"/>
            </h:panelGrid>  
        </p:tab>
    </p:tabView>  
</h:form>
Run Code Online (Sandbox Code Playgroud)

我的测试代码会简单地更改值:

public void doStuff() {
    s1 = String.valueOf(Math.random());
    s2 = String.valueOf(Math.random());
}
Run Code Online (Sandbox Code Playgroud)

我认为在我的方法中更改活动选项卡索引就足够了,就像这样:

public void doStuff() {
    // ...
    idx = 0;
}
Run Code Online (Sandbox Code Playgroud)

在tabChange事件上,将调用该方法,但tabview组件将转到单击的选项卡,忽略idx新值.

我想添加一个update属性来p:ajax呈现整个tabview,但只重新呈现了标签和/或标签的内容.

最奇怪的是,如果我update=":form:tabview"改为update=":form"或者update="@form",我只收到ajax响应中的标签内容 - >该组件从页面中消失!

我的bean是视图编写的,我使用的是Primefaces 3.5,JSF 2.1和Tomcat 7.

任何的想法?谢谢.

Dus*_*vic 10

尝试将TabView绑定到辅助bean中的服务器端组件实例.

1.将TabView组件实例添加到您的辅助bean

org.primefaces.component.tabview.TabView tabview=null;
Run Code Online (Sandbox Code Playgroud)

和相应的吸气剂和二传手

public TabView getTabview() {
    return tabview;
}

public void setTabview(TabView tabview) {
    this.tabview = tabview;
}
Run Code Online (Sandbox Code Playgroud)

2.将服务器端实例绑定到TabView

<p:tabView id="tabview" binding=#{yourBean.tabview} dynamic="true" cache="false">
...
</p:tabView>
Run Code Online (Sandbox Code Playgroud)

3.修改你的doStuff()方法

public void doStuff() {
    // ...
    //idx = 0;
    tabview.setActiveIndex(0);
}
Run Code Online (Sandbox Code Playgroud)

它有望成功.

  • 许多赞成,但这仅在您完全更新选项卡时才有效。然后最好不要使用绑定使用使用`tabIndex=#{yourbean.idx}`' (2认同)

Jav*_*ava 0

尝试将您的选项卡视图保持在面板网格中,并更新它h:panelgrid

h:panelGrid id="mainPanel">

<p:tabView id="tabview" activeIndex="#{ctrl.idx}" dynamic="true" cache="false">  
        <p:ajax event="tabChange" listener="#{ctrl.doStuff}" update=":form:mainPanel"/>
        <p:tab title="Tab 1" id="t1">  
            <h:panelGrid columns="1" cellpadding="10">
                <h:outputText value="#{ctrl.s1}"/>
            </h:panelGrid>  
        </p:tab>  
        <p:tab title="Tab 2" id="t2">  
            <h:panelGrid columns="1" cellpadding="10">
                <h:outputText value="#{ctrl.s2}"/>
            </h:panelGrid>  
        </p:tab>
    </p:tabView>


</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)