如何在p:dataTable内部使用ajax更新p:dataTable?

7
<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个回答

9
首先,这确实无法使用<h:commandLink>,因为它根本不支持update属性。也许你实际上想使用<p:commandLink>
一旦你修复了<h:commandLink>,使其成为<p:commandLink>,然后前往此答案:如何查找用于ajax更新/渲染的组件的客户端ID?无法从“bar”引用的表达式“foo”中找到组件 以了解如何在JSF ajax中引用组件。
阅读完那个答案后,你应该已经知道在这个特定的代码片段中,数据表格由:formId:tableId标识。所以,总之,以下内容应该可以做到:
<p:commandLink value="remove" update=":formId:tableId" />

请注意,直到PrimeFaces 3.3版本为止,在某些复杂的UI组合中,<p:dataTable>的ajax更新存在一个bug。这个问题在PrimeFaces 3.4中已经修复。如果您遇到了这个问题并且无法升级到PrimeFaces 3.4,则需要将表格包装在一些<h:panelGroup id="tablePanelId">中,然后使用update=":formId:tablePanelId"来代替。

谢谢您的回复...实际上我使用的是<p:commandLink>,我拼错成了<h:commandLink>。通过将我的数据表移动到<h:panelGroup>中,我找到了解决方案。 - Cijo

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