我刚刚在我们的应用程序中发现了一个奇怪的行为。
我们有一个rich:tabPanel switchType =“ajax”,带有多个标签。每个选项卡都包含一个rich:dataTable和一个带有a4j:form的编辑表单。
现在,当我们请求页面时,将呈现第一个选项卡并初始化数据表。到现在为止还挺好。 用户现在可以单击编辑链接(a4j:commandLink)以使用所选实体重新编辑编辑表单,并正确地重新生成表单。
但是:除此之外,我们从其他选项卡上的数据表中获取查询...即使选项卡不活动,也会初始化富数据表。未呈现,因为选项卡处于非活动状态 奇怪的是,如果我使用普通的h:dataTable,问题就会消失,即没有为此提取结果列表。
到目前为止,我有两个解决方法:
如果我在editLink上使用limitToList,似乎处理部分工作正常但这意味着我们必须调整所有命令按钮/链接,如果我不将它的id包含在内,全局消息就会停止工作reRendered属性......
我可以将选定的Tab绑定到辅助bean,并仅使用s:fragment
虽然第二个解决方案很直接,而我现在正在使用这个解决方案,但我仍在寻求解释。
是否有人已经遇到过这种行为并且正在进行解释?
由于 马丁
答案 0 :(得分:0)
我们确实遇到了这个问题,在执行任何ajax操作时几乎所有组件都会被渲染。
我们解决了这个问题,购买添加limitRender =“true”属性到组件和周围的组件< a4j:outPutPanel axajRender =“false”/> < rich:messages ajaxRendered =“false”/>。
然而,rich:tabPanel的属性limitRender =“true”,如果使用或不使用,它没有显示任何差异。
还记得使用< a4j:queue ignoreDupResponses =“true”/>作为有助于优化Ajax请求的最佳实践。在表格中使用此标签。
答案 1 :(得分:0)
在标签内使用<a4j:region>
来限制jsf树处理