如何从 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>
我只需要更新<p:dataTable>
而不需要整个表单。
我尝试使用@form
、@parent
、:formId:wizardId:tabId:tableId
,但它们都没有按我的意愿工作。当我使用@form
时,它正在检查我不需要做的验证。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:首先,这确实不会与<h:commandLink>
一起使用,因为它根本不支持update
属性。也许你真的打算使用<p:commandLink>
?
一旦您将 <h:commandLink>
固定为 <p:commandLink>
,然后前往此答案: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 组合中,<p:dataTable>
的 ajax 更新存在错误。这是 PrimeFaces 3.4 中的 fixed。如果您确实遇到了这个问题并且无法升级到 PrimeFaces 3.4,那么您需要将表格包装在一些 <h:panelGroup id="tablePanelId">
中,然后改用 update=":formId:tablePanelId"
。
【讨论】:
感谢您的回复...实际上我使用的是<p:commandLink>
我拼错了它为 <h:commandLink>
我通过将我的数据表移动到 <h:panelGroup>
得到了解决方案以上是关于如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 p:dataTable 中使用 p:graphicImage 和 StreamedContent? [复制]
如何以编程方式更改 p:dataTable 中 p:column 的渲染属性
如何在 PrimeFaces 3.0 的 p:dataTable 中设置 p:column 的宽度?