2009-08-22 216 views
3

我正在使用A4J Richfaces開發Web應用程序。 我的一個要求是,我需要檢查用戶是否在嘗試從頁面導航時更改表單中的任何值。攔截a4j:commandButton請求

我有保存和取消頁面中的按鈕。 我正在使用a4j:command按鈕取消功能。點擊取消按鈕應該做以下事情

  1. 檢查用戶是否在表單中修改的任何東西(這我使用javascript和有標誌做的,如果用戶更改的任何值)
  2. ,顯示確認對話框(JavaScript的與價值確認「你真的要放棄更改 - YES NO」),當用戶改變表單值
  3. 如果用戶說YES,然後提交使用AJAX的形式(通過使用A4J)

我A4J命令按鈕代碼是這樣的

<a4j:commandButton action="MyClass.cancel_action" 
    onclick="checkIsPageChanged()"/> 

問題這裏,在使用使用a4j:commandButton,我不能叫中間javascript函數,然後提交使用Ajax請求(這將檢查用戶是否已更新的值,並且顯示確認對話框的功能)。 我已經看過由JSF生成的代碼,代碼如下(不準確的,但較好語法)

<input type="button" 
    onclick="checkIsPageChanged();AJAX.submit('')/> 

的事情是當我點擊鏈接,它僅調用checkIsPageChanged(),而不是調用AJAX.submit()

任何解決方法,這將幫助我。

預先感謝您。

回答

3

更具體地講,我們可以使用:

onclick="if(!isPageChanged()) {return false}" 

返回false將不會提交申請。

+0

你的代碼有效,但應該澄清,返回'true'也不會提交請求。請參閱https://community.jboss.org/thread/3755?start=0&tstart=0&_sscc=t 實際上,'onclick =「!isPageChanged()」'將不起作用。 – 2013-11-08 12:58:05

3

使用a4j:jsFunction並在checkIsPageChanged()返回true時從a4j:commandButton調用該函數。

例如。

<a4j:commandButton action="MyClass.cancel_action" 
    onclick="if(checkIsPageChanged()) { cancel(); }"/> 
<a4j:jsFunction name="cancel" action="MyClass.cancel_action"/>