拦截a4j:commandButton请求
问题描述:
我正在使用A4J Richfaces开发Web应用程序。 我的一个要求是,我需要检查用户是否在尝试从页面导航时更改表单中的任何值。拦截a4j:commandButton请求
我有保存和取消页面中的按钮。 我正在使用a4j:command
按钮取消功能。点击取消按钮应该做以下事情
- 检查用户是否在表单中修改的任何东西(这我使用javascript和有标志做的,如果用户更改的任何值)
- ,显示确认对话框(JavaScript的与价值确认“你真的要放弃更改 - YES NO”),当用户改变表单值
- 如果用户说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()
。
任何解决方法,这将帮助我。
预先感谢您。
答
更具体地讲,我们可以使用:
onclick="if(!isPageChanged()) {return false}"
返回false将不会提交申请。
答
使用a4j:jsFunction
并在checkIsPageChanged()
返回true时从a4j:commandButton
调用该函数。
例如。
<a4j:commandButton action="MyClass.cancel_action"
onclick="if(checkIsPageChanged()) { cancel(); }"/>
<a4j:jsFunction name="cancel" action="MyClass.cancel_action"/>
你的代码有效,但应该澄清,返回'true'也不会提交请求。请参阅https://community.jboss.org/thread/3755?start=0&tstart=0&_sscc=t 实际上,'onclick =“!isPageChanged()”'将不起作用。 – 2013-11-08 12:58:05