如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?

Posted

技术标签:

【中文标题】如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?【英文标题】:How to ajax-update the p:dataTable from inside the p:dataTable itself? 【发布时间】:2012-09-13 01:00:33 【问题描述】:
<h:form id="formId">
   <p:wizard id="wizardId">
      <p:tab id="tabId">
         <p:dataTable id="tableId">
           <p:column>
             <h:commandLink value="remove" update=""/>
           </p:column>
         </p:dataTable>
      </p:tab>
   </p:wizard>
</h:form>

我只需要更新&lt;p:dataTable&gt; 而不需要整个表单。 我尝试使用@form@parent:formId:wizardId:tabId:tableId,但它们都没有按我的意愿工作。当我使用@form 时,它正在检查我不需要做的验证。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

首先,这确实不会与&lt;h:commandLink&gt; 一起使用,因为它根本不支持update 属性。也许你真的打算使用&lt;p:commandLink&gt;

一旦您将 &lt;h:commandLink&gt; 固定为 &lt;p:commandLink&gt;,然后前往此答案:How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar" 了解如何在 JSF ajax 中引用组件。

阅读该答案后,您应该已经发现数据表位于:formId:tableId 标识的特定代码sn-p 中。所以,总而言之,应该做到以下几点:

<p:commandLink value="remove" update=":formId:tableId" />

请注意,在 PrimeFaces 3.3 之前,在某些复杂的 UI 组合中,&lt;p:dataTable&gt; 的 ajax 更新存在错误。这是 PrimeFaces 3.4 中的 fixed。如果您确实遇到了这个问题并且无法升级到 PrimeFaces 3.4,那么您需要将表格包装在一些 &lt;h:panelGroup id="tablePanelId"&gt; 中,然后改用 update=":formId:tablePanelId"

【讨论】:

感谢您的回复...实际上我使用的是 &lt;p:commandLink&gt; 我拼错了它为 &lt;h:commandLink&gt; 我通过将我的数据表移动到 &lt;h:panelGroup&gt; 得到了解决方案

以上是关于如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 p:dataTable 中使用 p:graphicImage 和 StreamedContent? [复制]

如何在 <p:dataTable> 中一次展开一行?

如何以编程方式更改 p:dataTable 中 p:column 的渲染属性

如何在 PrimeFaces 3.0 的 p:dataTable 中设置 p:column 的宽度?

如何以编程/动态方式将组件添加到 p:dataTable facet

如何更改默认 p:dataTable emptyMessage 消息