【问题标题】:Primefaces ajax updatePrimefaces ajax 更新
【发布时间】:2011-12-17 06:54:18
【问题描述】:

我有 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,通过萤火虫检查这个 ID,并将它作为一个值提供给 primefaces ajax 组件的更新属性。我也对 html outputformat 和 param 组件执行了这种方法。但没有成功,最后我尝试更新表格,这次整个表格已经像文本文件一样渲染了。过滤后有没有办法更新表大小?顺便说一句,我正在使用 primefaces 3.0.RC1-SNAPSHOT,并在 Firefox 7.0.1 中进行测试。非常感谢您的关注和评论。

【问题讨论】:

  • 您是否尝试过使用 autoUpdate="true" 将页脚内容保留在面板中。如果您还没有尝试过,这将是一种简单的方法

标签: ajax jsf-2 primefaces datatable


【解决方案1】:

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

您也可以尝试 update="@this",但我不确定这会产生什么不应该与 @form 一起使用的效果。

【讨论】:

    【解决方案2】:

    here 存在一个未解决的问题,它们为 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 客户端挂钩调用)来更新页脚行内的组件。与数据本身相比,这会导致页脚更新稍有延迟,但我可以忍受。

    【讨论】:

    • 效果很好,这个问题还没有解决
    • 那是炉排。希望 primefaces 能解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2011-12-08
    • 2013-05-07
    • 2015-11-05
    相关资源
    最近更新 更多