<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
,它正在检查我不需要做的验证。我怎样才能做到这一点?
最佳答案
首先,这确实永远不会适用于 <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
标识的特定代码片段中。 .因此,总而言之,应执行以下操作:
<p:commandLink value="remove" update=":formId:tableId" />
请注意,在 PrimeFaces 3.3 之前,
<p:dataTable>
的 ajax 更新中存在一个错误。在某些复杂的 UI 组合中。这是 fixed在 PrimeFaces 3.4 中。如果您恰好遇到这个问题并且无法升级到 PrimeFaces 3.4,那么您需要将表包裹在一些 <h:panelGroup id="tablePanelId">
中。然后使用 update=":formId:tablePanelId"
反而。
关于ajax - 如何ajax更新p :dataTable from inside the p:dataTable itself?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516397/