<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
时,它正在检查我不需要做的验证。
我怎样才能做到这一点?
答案 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"
。