7

2 つのタブを含むタブ ビューがあります。

タブ 1 からタブ 2 に切り替えると、検証を実行していくつかの値を更新するコードを呼び出しています。この検証の結果に応じて、タブ 1 にとどまるか、タブ 2 に移動してタブのコンテンツを更新します。

私のタブビュー:

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

単純に値を変更する私のテストコード:

public void doStuff() {
    s1 = String.valueOf(Math.random());
    s2 = String.valueOf(Math.random());
}

次のように、メソッドでアクティブなタブのインデックスを変更するだけで十分だと思いました。

public void doStuff() {
    // ...
    idx = 0;
}

tabChange イベントでは、メソッドが呼び出されますが、タブビュー コンポーネントはクリックされたタブに移動し、idx新しい値は無視されます。

update 属性を追加するとp:ajax、タブビュー全体がレンダリングされると思いましたが、タブおよび/またはタブのコンテンツのみが再レンダリングされます。

そして最も奇妙なことに、 orに変更update=":form:tabview"すると、ajax 応答でタブのコンテンツのみを受け取ります -> コンポーネントがページから消えます!update=":form"update="@form"

私の Bean はビュースコープで、Primefaces 3.5、JSF 2.1、および Tomcat 7 を使用しています。

何か案が?ありがとう。

4

3 に答える 3

4

私はこれを簡単に修正します:

  public void onSPTabChange(TabChangeEvent event) 
  {   
  TabView tabView = (TabView) event.getComponent();
  currentData.setSP_Index(tabView.getChildren().indexOf(event.getTab())+1);
  }

現在のデータには、タブの数を持つプロパティSP_Indexがあります(最初、2番目....)

 <p:tabView id="tabView" styleClass="tabView">  
 <p:ajax event="tabChange" listener="#{dataAccess.onSPTabChange}" />
 ....

jqueryスクリプトを追加

<script>
  $("#tabView li:nth-child(#{currentData.SP_Index})").click();
</script>
于 2014-02-25T12:52:18.347 に答える
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>
于 2013-05-17T07:43:17.097 に答える