2011-04-01 62 views
1

的commandButton的onComplete腳本我有一個如何有條件地調用A4J:根據行動成果

<a4j:commandButton action="#{myBean.doCalculation}" 
        oncomplete="redirectBrowser()" /> 

但是,如果有一個錯誤在myBean.doCalculation(),然後oncomplete屬性總是調用。我如何讓它取決於行動方法的結果?

回答

4

您可以檢查oncomplete事件中的錯誤,並在沒有找到時重定向。這是可以做到這樣的

oncomplete="#{facesContext.maximumSeverity == null ? 'redirectBrowser()' : 'doSomethingElse()'}" 
+0

a4j:commandButton和導航確實沒有問題 - 它不是用於導航的。一種選擇是使用進行導航。 – 2011-04-05 16:33:26

2

嘛,只是找facesContext.maximumSeverity == null是不夠的,有可能是一個警告,因爲當前最大的嚴重性,應該重定向了。相反,寫,看起來如果有優先級的錯誤的任意一個最大嚴重程度的方法...

3

如果你在JSF 2.0,你可以使用FacesContext#isValidationFalied()檢查驗證失敗與否:

oncomplete="if (#{not facesContext.validationFailed}) redirectBrowser()" 

然而,僅僅執行重定向的操作方法是更乾淨:

public String doCalculation() { 
    // ... 

    if (success) { 
     return "nextPage.xhtml?faces-redirect=true"; 
    } else { 
     return null; 
    } 
} 

然而,更乾淨。將只是做一個Validator驗證。這樣,當驗證失敗時,根本不會調用操作方法。

+0

感謝您的回答!這非常有幫助。恭敬地不同意一點,在動作方法中做重定向不那麼幹淨 - 恕我直言,允許通過返回字符串重定向是面臨的設計缺陷... – wprl 2012-05-11 20:51:58

+2

這絕對不是一個設計缺陷。 PRG是最常用的網頁設計模式之一:http://en.wikipedia.org/wiki/Post/Redirect/Get然而,從頁面X到頁面Y使用POST表單進行*普通香草導航,一個設計缺陷(由開發人員,而不是由JSF)。另請參閱http://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hmandmandlink – BalusC 2012-05-11 20:52:59

+0

對不起,懶惰不是我正在尋找的詞。 PRG沒什麼問題;這只是一個笨拙的語法就是我所掌握的。返回一個字符串而不是調用一些重定向方法似乎很奇怪。 – wprl 2012-05-11 21:23:13