首页 > 解决方案 > 如何在单个页面中包含的两个数据表中使用相同的 ajax 事件?

问题描述

我得到了一个包含两个数据表的 .xhtml 文档。每个数据表都附加了几个 ajax 事件。第一个数据表有一个带有链接的列。如果您单击其中一个,它会打开第二个数据表,并且您可以通过一个按钮返回第一个数据表。

结构如下所示:

主页 :

<html>
   <h:body>

      // Stuff ...

    <div>
        // Including first datatable
        <ui:fragment rendered="#{GenericReportControllerBean.reportType == 'object'}">
            <ui:include src="/site/dialog/uiDatatableGenericReport.xhtml">
                <ui:param name="uiGenericBean" value="#{GenericReportControllerBean}"></ui:param>
                <ui:param name="rowStyleClass" value=""></ui:param>
            </ui:include>
        </ui:fragment>

      // Including second datatable
      <ui:fragment rendered="#{GenericReportControllerBean.reportType == 'family'}" >
          <ui:include src="/site/dialog/uiDatatableFamilyReport.xhtml">
              <ui:param name="uiGenericBean" value="#{GenericReportControllerBean}"></ui:param>
              <ui:param name="rowStyleClass" value="#{object[3] &lt; 0 ? &apos;red&apos; : &apos;&apos;} #{object[3] &gt; 0 ? &apos;orange&apos; : &apos;&apos;}"></ui:param>
              <ui:param name="subid" value="family"></ui:param>
            </ui:include>
        </ui:fragment>

   </div>
   </h:body>
</html>

数据表具有相同的结构。标题相同(这可能是一个错误,因为它们共享相同的行和相同的 ID)

<p:dataTable id="objects#{((subid==null)?'':subid)}" 
        rows="#{uiGenericBean.rows}" lazy="true"
        // others attributes

        // Some code...

        <p:ajax event="rowSelect" update="objects#{((subid==null)?'':subid)}" />
        <p:ajax event="rowUnselect" update="objects#{((subid==null)?'':subid)}" />
        <p:ajax event="rowSelectCheckbox" update="objects#{((subid==null)?'':subid)}" />
        <p:ajax event="rowUnselectCheckbox" update="objects#{((subid==null)?'':subid)}" />
        <p:ajax event="filter" oncomplete="updateFilters()" />
        <p:ajax event="toggleSelect" listener="#{uiGenericBean.selectAllObjects}" update="objects#{((subid==null)?'':subid)}" />
    </p:dataTable>

我的问题如下:在我进入第二个数据表之前,evertyhing 运行良好。在此之后,如果我回到第一个表并选择一行,所有行都会被选中。

如果我从任何数据表中删除AJAX事件,则此行为停止,但是仅在选择一行时才能启用我的提交按钮。然后没有 ajax 事件和更新,我的按钮永远不会启用。

我还注意到,如果我从任何表中删除更新属性但让 ajax 事件,问题仍然存在。

我试图更改两个表的 id,但它仍然不能解决问题。

我还考虑将 ajax 事件放在主页中,但是这些表在程序的其他页面中使用。

知道为什么我有这种行为以及如何避免它吗?

标签: jsfprimefacesxhtml

解决方案


推荐阅读