如何从p:dataTable本身内部更新p:dataTable?

Cij*_*ijo 6 ajax datatable primefaces jsf-2

<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>
Run Code Online (Sandbox Code Playgroud)

我只需更新<p:dataTable>没有整个表单.我尝试使用@form,@parent,:formId:wizardId:tabId:tableId,但没有人正在为我想.当我使用时@form,它正在检查我不需要做的验证.

我怎样才能做到这一点?

Bal*_*usC 8

首先,这确实永远不会与a一起工作<h:commandLink>,仅仅因为它根本不支持该update属性.也许你真的打算使用<p:commandLink>

一旦你修复了<h:commandLink>a <p:commandLink>,然后转到这个答案:如何找到ajax更新/渲染的组件的客户端ID?找不到从"bar"引用的表达式"foo"的组件,以了解如何在JSF ajax中引用组件.

在阅读完该答案后,您应该已经发现数据表位于此特定代码段中:formId:tableId.所以,总而言之,以下应该做到:

<p:commandLink value="remove" update=":formId:tableId" />
Run Code Online (Sandbox Code Playgroud)

请注意,在PrimeFaces 3.3中,<p:dataTable>在某些复杂UI组合的ajax更新中存在错误.这在PrimeFaces 3.4中得到修复.如果你遇到这个问题并且无法升级到PrimeFaces 3.4,那么你需要将表包装在一些中<h:panelGroup id="tablePanelId">然后再使用update=":formId:tablePanelId".