Primefaces ajax更新

5

我有一个PrimeFaces的数据表格:

<p:panel id="resultpanel">
  <p:dataTable id="tbl" var="job" value="#{report.jobModel}"
               paginator="true" rows="#{report.jobModel.pageSize}"
               paginatorPosition="bottom" lazy="true" scrollable="true"
               resizableColumns="true" rendered="#{!empty report.jobModel}"
               emptyMessage="#{messages['common.datatable.emptymessage']}">

    <p:ajax event="filter" listener="#{report.jobModel.onFilter}"
            update="@form" />

    <p:column sortBy="#{job.detail4}" filterBy="#{job.detail4}">
      <f:facet name="header">
        <h:outputText value="#{messages['content.donejobs.ftdi.datatable.fixedfeecolumn.header']}" />
      </f:facet>
      <h:outputText value="#{job.detail4}">
        <f:converter converterId="KurusLiraConverter"></f:converter>
      </h:outputText>
    </p:column>

    <f:facet name="footer">
      <h:outputFormat value="#{messages['content.donejobs.ftdi.datatable.footer']}">
        <f:param value="#{report.jobModel.rowCount}" />
      </h:outputFormat>

      <p:panel layout="block" style="border: 0px; text-align: center;">
        <p:commandLink ajax="false" title="Download Report">
          <p:graphicImage value="/images/excel.png" />
          <p:fileDownload value="#{report.excelFileOfReportTable}" />
        </p:commandLink>
      </p:panel>
    </f:facet>
  </p:dataTable>
</p:panel>

当我筛选表格时,我希望更新页脚部分。我已经尝试将页脚中的所有内容放置在单个面板中,并给它一个ID,通过firebug检查此ID,并将其作为primefaces ajax组件的update属性的值。我还尝试过在html outputformat和param组件中执行此方法,但都没有成功。最后,我尝试更新表单,但这次整个表格呈现为文本文件。是否有一种方法可以在筛选后更新表格大小?顺便说一下,我正在使用primefaces 3.0.RC1-SNAPSHOT,在firefox 7.0.1上测试。非常感谢您的关注和评论。

你尝试过将页脚内容放在一个autoUpdate="true"的面板中吗?如果你还没有尝试过,这将是一种简单易行的方法。 - Srikanth Ganji
2个回答

6

这个问题有一个开放的问题在这里,他们为dataTable代码提供了一个补丁。我的解决方法(也就是巨大的hack)不需要接触primefaces代码库,我更喜欢这种方法。我已经测试过以下事件,但我不知道它为什么不能用于rowEdit事件。

<p:remoteCommand name="updateFilters" update="table:totalid"></p:remoteCommand>
<p:dataTable id="tabelaMunicipio" value="#{bean.model}" ...>
<p:ajax event="page" oncomplete="updateFilters()"/>
<p:ajax event="filter" oncomplete="updateFilters()"/>   
<p:ajax event="sort" oncomplete="updateFilters()"/>
<p:column headerText="#{msg['id']}" sortBy="#{id}"> 
   <h:outputText value="#{item.id}"></h:outputText>  
   <f:facet name="footer"> 
      <h:outputText value="#{bean.model.totals['id']}" id="totalid"/> 
   </f:facet> 
</p:column> 
...
</p:dataTable>

是的,我使用p:remoteCommand(由p:ajax中的oncomplete客户端挂钩调用)来更新页脚行内的组件。这将导致页脚更新比数据本身稍有延迟,但我可以接受这点小的延迟。

1
工作得很好,这个问题仍未解决。 - Andreas
那太好了。希望PrimeFaces能够解决这个问题。 - Buddhika Ariyaratne

0

3.0.RC1-SNAPSHOT不是官方版本,据我所知,它可能意味着在M4之后或M3和M4之间的任意数量的夜间构建版本。您应该升级(或降级?)到稳定版本,如M3或M4,并查看是否出现相同的问题。

此外,您可以尝试使用update="@this",但我不确定它会产生什么效果,因为这似乎已经在@form中工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接