[英]Primefaces commandButton in dataTable - cannot set property in bean or cannot update the table
我從例子開始:
Example 1
<p:dataTable>
...
<p:column headerText="Actions" style="text-align:center; width:100px;">
<p:commandLink value="Delete" action="#{bean.delete}"
update="data">
<f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />
</p:commandLink>
</p:column>
...
</p:dataTable>
Example 2
<p:dataTable>
...
<p:column headerText="Actions" style="text-align:center; width:100px;">
<p:commandLink value="Delete" actionListener="#{bean.delete}"
update="data">
<f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />
</p:commandLink>
</p:column>
...
</p:dataTable>
在第一種情況下(帶有action
命令鏈接),屬性bean.key
的設置正確,但是在刪除該項目后不會再次呈現該表。
在第二種情況下(與actionListener
命令鏈接),未設置屬性,並且我得到NullPointerException
。 但是我在表外還有另一個與actionListener
命令鏈接,它可以正常工作並更新表。
刪除項目后如何以第一種情況渲染表格或以某種方式解決問題?
嘗試將屬性prependId=false
添加到包裝帶有id="update"
組件的表單標簽中
<h:form prependId="false">
建議:將屬性process="@this"
到您的<p:commandLink value="Delete" ...>
在這種情況下,您僅提交這一組件而不是表單中的所有組件
您是否有兩種forms
? p:commandLink
采用第一種form
,而渲染組件(具有id="data"
)采用第二種form
?。
然后,您應該為第二種form
分配一個id
,並且您的commandLink應該類似於<p:commandLink... update=":secondformid:data">
。
如果您使用的是PrimeFaces 3.0,則可以在《 PrimeFaces用戶指南》第4章的“ 4.1.2部分渲染和處理->使用ID”中閱讀更多內容。
http://www.primefaces.org/documentation.html
對不起,我的英語不好。
提示(或技巧):
代替:
<p:commandLink value="Delete" action="#{bean.delete}" update="data">
<f:setPropertyActionListener target="#{bean.key}" value="#{item.key}" />
</p:commandLink>
您可以使用:
<p:commandLink value="Delete" action="#{bean.delete}" actionListener="#{bean.setKey(item.key)}" update="data" />
這樣,您可以使用actionListener顯式調用setter並設置屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.