私は次の構造を持っています
<h:form>
<!-- some elements -->
<p:accordionPanel id="outer" multiple="true" var="node" dynamic="false" value="#{model.nodes}">
<p:tab id="outerId">
<p:accordionPanel id="inner" multiple="true" dynamic="false" var="child" value="#{node.children}">
<p:tab id="innerId">
<!-- iterated components -->
</p:tab>
</p:accordionPanel>
</p:tab>
</p:accordionPanel>
</h:form>
次に、内部タブ内および階層全体の外部から ajax ポストバック & 再レンダリングで使用しようとしました:
<f:ajax event="click" render="@form" execute="@form" />
また
<p:ajax process="@form" partialSubmit="false" update="@form" />
問題は、アクティブ インデックスが外側のアコーディオンに対してのみ永続化され、子アコーディオンに対しては永続化されないことでした (ただし、POST データを見ると、子アコーディオンのアクティブ インデックスも送信されます)。私は何か間違ったことをしていますか、それともこれがすぐに使えると期待すべきではありませんか?
何がうまくいくでしょうか
一方、たとえばモデルとすべてのノードにフィールドを提供することで、アクティブなインデックスを手動で管理できることを知っています。これにより、このデータが永続化されます。(テストはしませんでしたが、多くのpf投稿/ページを掘り下げた後、それが私が期待するものです)
<p:accordionPanel activeIndex="#{model.activeIndex}"...
<p:accordionPanel activeIndex="#{node.activeIndex}"...
この2番目のアプローチが唯一の回避策であることを誰かが確認できますか? または、最初のケースで何か間違ったことをしていますか?
プライムフェイス3.4.2
Glassfish スタック3.1.2.2
更新 05.04.2013
後者のアプローチも機能しません。ajax POST では node.activeIndex が値を受け取るため""
(ルート アクティブ インデックスのみが正しく設定されます)
データ シナリオ (POST データの詳細)
- ページをロードします。
- 最初の 2 つの外側のタブを開きます。
- 2 番目の外側のタブから最初の 2 つの内側のタブを開きます。
- ページ内の要素をクリックします
- 投稿データ
javax.faces.partial.ajax=true javax.faces.source=j_idt106:j_idt271:1:j_idt121:j_idt110:0:j_idt113:featureRepeater:11:featureCheckboxP javax.faces.partial.execute=gridDetailPage javax.faces.partial.render=gridDetailPage javax.faces.behavior.event=valueChange javax.faces.partial.event=変更 gridDetailPage=グリッド詳細ページ j_idt106:j_idt271:1:j_idt121:j_idt110_active=0,1 // 内部の開いているタブ j_idt106:j_idt271_active=0,1 // 外側の開いているタブ javax.faces.ViewState=4232962649695633063:-8633977119414123467
- レンダリングされたページには、最初の 2 つの外側のタブがあり、2 番目の外側のタブから 1 番目の内側のタブのみが開いています (間違っています)。
- 次の POST は、現在の (間違った) 構成のみを POST しています。
javax.faces.partial.ajax=true javax.faces.source=j_idt106:j_idt271:1:j_idt121:j_idt110:0:j_idt113:featureRepeater:0:featureCheckboxP javax.faces.partial.execute=gridDetailPage javax.faces.partial.render=gridDetailPage javax.faces.behavior.event=valueChange javax.faces.partial.event=変更 gridDetailPage=グリッド詳細ページ j_idt106:j_idt271:1:j_idt121:j_idt110_active=0 // 内部の開いているタブ j_idt106:j_idt271_active=0,1 // 外側の開いているタブ javax.faces.ViewState=4232962649695633063:-8633977119414123467