拦截a4j:commandButton请求

时间:2009-08-22 12:28:30

标签: jsf richfaces ajax4jsf

我正在使用A4J,Richfaces开发Web应用程序。 我的要求之一是,我需要检查用户在尝试离开页面时是否更改了表单中的任何值。

我在页面中保存并取消按钮。 我使用a4j:command按钮取消功能。点击取消按钮应该在下面做

  1. 检查用户是否修改了表单中的任何内容(我正在使用javascript进行操作,如果用户更改了任何值,则会显示一个标记)
  2. 当用户更改表单值时,显示确认框(javascript确认值为“您确实要放弃更改 - 是否”)
  3. 如果用户说“是”,则使用AJAX(使用A4J)
  4. 提交表单

    我的a4j命令按钮代码是这样的

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

    这里的问题是,在使用a4j:commandButton时,我无法调用中间javascript函数(检查用户是否更新了任何值并显示确认框的函数),然后使用ajax提交请求。 我查看了JSF生成的代码,代码就像(不是确切的但是语法)

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

    事情就是当我点击按钮时,它只调用checkIsPageChanged()而不是调用AJAX.submit()

    任何解决方法都可以帮助我。

    提前谢谢。

2 个答案:

答案 0 :(得分:3)

使用a4j:jsFunction并在a4j:commandButton返回true时从checkIsPageChanged()拨打该电话。

例如。

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

答案 1 :(得分:3)

更具体地说,我们可以使用:

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

返回false将不会提交请求。