2012-07-04 15 views
0

在我的JSF頁面中,我有一個帶有inputText,outputText和submit按鈕的隱藏表單。我正在使用一個腳本,它在某些事件中填充inputText並單擊該按鈕。該按鈕調用一個支持bean中的方法,在該支持bean中我需要執行一些操作,然後設置outputText的值。要做到這一點,我找到了UIOutput組件並設置了它的值。在我的javascript中,我需要在點擊按鈕後執行一些其他操作,但問題在於可能需要一些時間才能完成操作並使用返回值填充outputText。所以javascript中的下一個動作不會讀取正確的值。我想在outputText上添加一個更改事件,以便僅在更新值後執行我的操作,但我遇到與JS Events: hooking on value change event on text inputs相同的問題。將JS動作與JSF同步

+0

調用輔助bean中的方法的按鈕正在執行AJAX請求? – elias

+0

是的。它調用backing bean中的方法。該方法更新outputText的值,並使用AJAX請求再次呈現outputText以獲取新值。 – user579674

+0

也許你想爲AJAX按鈕使用'oncomplete'事件,那麼? – elias

回答

2

所以,如果你使用的是a4j:commandButton,你可以使用oncomplete屬性來完成AJAX請求後執行的一些JS代碼。

由於您使用的是h:commandButtonf:ajax,做到這一點的方法是使用的F:AJAX屬性onevent,並檢查它是否成功是這樣的:

<script> 
    function doWhatever(e){ 
     if(e.status == 'success'){ 
      doYourThingHere(); 
     } 
    } 
</script> 
<h:commandButton action="#{someMB.someAction}"> 
    <f:ajax ... onevent="doWhatever" /> 
</h:commandButton> 

如果您使用RichFaces,你可能要看看a4j:ajax組件,請參閱this question

更新:刪除不正確否則假定請求未成功。請參閱the answer to this question以查看狀態屬性的其他含義。

+0

謝謝。這似乎解決了這個問題。 – user579674

+0

「else」中的警報消息不完全正確。另見http://stackoverflow.com/questions/8570592/trigger-jsf-ajax-before-javascript/8574487#8574487 – BalusC

+0

@BalusC你說得對,我要解決這個問題!感謝您指出! – elias