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

时间:2012-09-20 15:56:37

标签: ajax jsf-2 datatable primefaces

<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 个答案:

答案 0 :(得分:8)

首先,这确实不会与<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中,在某些复杂的UI组合中,<p:dataTable>的ajax更新中存在错误。这是PrimeFaces 3.4中的fixed。如果您遇到这个问题并且无法升级到PrimeFaces 3.4,那么您需要将表格包装在某些<h:panelGroup id="tablePanelId">中,然后再使用update=":formId:tablePanelId"