2009-08-22 223 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"/>