有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

tabpanel的inactive选项卡中的java Datatable初始化值

我只是在我们的应用程序中发现了一个奇怪的行为

我们有一个丰富的:tabPanel switchType=“ajax”,包含多个选项卡。每个选项卡都包含一个rich:dataTable和一个带有a4j:form的编辑表单

现在,当我们请求页面时,第一个选项卡被呈现,datatable被初始化。到现在为止,一直都还不错。 用户现在可以单击编辑链接(a4j:commandLink)以使用所选实体重新提交编辑表单,表单将正确重新提交

但是:除此之外,我们从其他选项卡上的数据表中得到一个查询。。。即使选项卡未处于活动状态,富数据表也会被初始化。由于选项卡处于非活动状态,因此未呈现。 奇怪的是,如果我使用一个普通的h:dataTable,问题就消失了,也就是说,没有为这一个获取结果列表

到目前为止,我有两个解决办法:

  1. 如果我在editLink上使用limitToList,似乎处理部分工作正常,但这意味着我们必须调整所有commandbuttons/链接,如果我不将其id包含在reRendered属性中,全局消息将停止工作

  2. 我可以将所选选项卡绑定到一个支持bean,并使用s:fragment只呈现活动选项卡的内容

虽然第二个解决方案非常简单,我现在正在使用这个方案,但我仍在寻求解释

是否有人已经遇到过这种行为,并对其进行了解释

谢谢 马丁


共 (2) 个答案

  1. # 1 楼答案

    我们确实存在这个问题,几乎所有的组件在执行任何ajax操作时都会被渲染

    我们通过向组件添加limitRender=“true”属性,并通过<;a4j:outPutPanel axajRender=“false”/>; <;rich:messages ajaxRendered=“false”/>

    但是,rich:tabPanel具有limitRender=“true”属性,如果使用与否,该属性没有显示任何差异

    还记得使用<;a4j:queue ignoreDupResponses=“true”/>;作为帮助优化Ajax请求的最佳实践。在表单中使用此标记

  2. # 2 楼答案

    在选项卡内使用<a4j:region>来限制jsf树处理