簡體   English   中英

DataTable中的Primefaces commandButton-無法在Bean中設置屬性或無法更新表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM