2013-05-06 72 views
0

我想要做的就是像在Primefaces展示(http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf)我想更新我的數據表中的行基本行選擇的例子。問題是當我點擊更新數據表按鈕時,對話框出現驗證錯誤。PrimeFaces對話框驗證錯誤

第二件事是什麼,是方法的執行時間的順序(動作更新的onclick-F:setPropertyActionListener)。

<p:commandButton id="updateButtonId" 
            action="#{myController.showCompanyEditPanel}" 
            update=":tabView:companyForm:companyEditPanel" 
            onclick="companyDialog.show()"           
            icon="ui-icon-pencil" title="update"> 
    <f:setPropertyActionListener value="#{company}" target="#{myController.selectedCompany}" /> 
</p:commandButton> 


<p:dialog id="editCompanyDialogId" header="CompanyEdit" widgetVar="companyDialog" resizable="false"> 
    <p:panel id="companyEditPanel" > 
    //some stuff here 
    </p:panel> 
</p:dialog> 

回答

1

你似乎缺少使用<p:commandButton>這裏的一大要點,以及因爲似乎混合了客戶端和服務器端事件。

首先對<p:commandButton>。此組件設計爲將POST(部分)表單數據發佈到當前URL,執行業務作業(偵聽器)方法並返回更新的組件/執行導航。您當然可以將JavaScript事件附加到所有這些屬性上。

二,onclick,oncomplete和其他on...屬性對應一些客戶端事件。特別地,被點擊按鈕時被觸發onclick功能,當DOM的AJAX調用之後已更新oncomplete函數被調用,即在<p:ajax update="...">或簡單地在<p:commandButton>update="..."屬性指定的元素。

第三,所有動作偵聽器(因此,actionListener屬性,<f:actionListener>標籤,標籤<f:setPropertyActionListener>)將是正確的,他們在你的標籤中指定的順序執行,看this answer更多的闡述。最後一個要執行的方法是action方法,在此之後發回響應。