2012-01-21 65 views
0

我在<h:form>中有輸入字段和命令按鈕。輸入字段是必需的,如果輸入了無效的內容,驗證錯誤信息就會顯示出來。在窗體的末尾,我有以下按鈕:即使輸入無效,Ajax回調onstart也能正常工作

<p:commandButton value="" ajax="true" update="foormm" 
    icon="ui-icon-check" actionListener="#{bean.sayHello}" 
    onstart="dialog.show()" 
    oncomplete="handleAjaxResponse(xhr, status, args)"> 
</p:commandButton> 

問題是,對話框顯示與驗證無關。我認爲Ajax請求是在輸入被驗證的情況下做出的。這裏有什麼問題?爲什麼onstart即使必填字段爲空也會被觸發?

我在Eclipse中使用JSF 2.0,Primefaces 3.0和Weblogic 12.1。

任何幫助表示讚賞。

+0

該對話框假定爲「等待,正在處理的請求」。所以在成功上顯示它是沒有意義的,因爲用戶已經等待了。 –

回答

1

換句話說,只有當回發後沒有發生驗證錯誤時,纔想顯示對話框? onstart根本沒有考慮到這一點。它在調用ajax回發之前被調用。

你需要以不同的方式處理它。 <p:dialog>具有visible屬性,其可以將EL表達式評估爲boolean結果。你可以利用它:

<p:dialog id="dialog" visible="#{some condition}"> 

#{some condition}可以在其最簡單的是FacesContext#isPostback()FacesContext#isValidationFalied()的組合。所以,如果它是回發並且驗證沒有失敗,那麼對話框應該是可見的。

<p:dialog id="dialog" visible="#{facesContext.postback and not facesContext.validationFailed}"> 

你只需要讓該對話以及您的按鈕更新:

<p:commandButton value="" ajax="true" update="foormm dialog" 
    icon="ui-icon-check" actionListener="#{bean.sayHello}" 
    oncomplete="handleAjaxResponse(xhr, status, args)"> 
</p:commandButton> 

或者,你也可以讓對話框的visible條件取決於您在行動設置一些bean屬性(聽衆?)方法:

<p:dialog id="dialog" visible="#{bean.saidHello}"> 
相關問題