我有以下结构
<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 帖子/so 页面后,这就是我所期望的)
<p:accordionPanel activeIndex="#{model.activeIndex}"...
<p:accordionPanel activeIndex="#{node.activeIndex}"...
谁能确认第二种方法是唯一的方法?或者我在第一种情况下做错了什么?
Primefaces 3.4.2
Glassfish 堆栈3.1.2.2
更新 05.04.2013
后一种方法也不起作用。因为在 ajax POST node.activeIndex 上接收到值""
(并且只有根活动索引设置正确)
数据场景(POST数据详情)
- 加载页面。
- 打开前两个外部选项卡。
- 从第二个外部选项卡打开前两个内部选项卡。
- 单击页面中的元素
- 发布数据
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=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
- 呈现的页面具有第一个两个外部选项卡,并且仅打开第二个外部选项卡的第一个内部选项卡(错误)
- 以下 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=gridDetailPage j_idt106:j_idt271:1:j_idt121:j_idt110_active=0 // 内开标签 j_idt106:j_idt271_active=0,1 // 外开标签 javax.faces.ViewState=4232962649695633063:-8633977119414123467