日期:2014-05-16  浏览次数:20556 次

RichFaces中如何让ModalPanel在Ajax验证有错误时不关闭
RichFaces中如何让ModalPanel在Ajax验证有错误时不关闭(如必填项未填,验证器验证不通过等),验证通过了才关闭,我的解决方法如下:

第一:后台action类里面声明一变量用来控制是否关闭modalPanel
private String hideModalPanel;//加上getter、setter方法
第二:在前台按钮加上oncomplete="#{action.hideModalPanel}",当我们触发按钮提交后会触发oncomplete事件,若验证未通过则不会执行action方法,则hideModalPanel默认为null,故modalPanel不会关闭,若验证通过,则会执行action方法,我们可在action方法里面设置(当然你也可以在action再加验证,自己可控制)
setHideModalPanel("Richfaces.hideModalPanel('modalPanel的id')");
当action方法执行完成,则会执行oncomplete="#{action.hideModalPanel}",此时hideModalPanel的值为Richfaces.hideModalPanel('modalPanel的id')了,故modalPanel会关闭。

总结:主要是利用oncomplete事件(The client-side script method to be called after the request is completed),当action请求完成后触发,利用这种机制我们可轻松实现上面问题,当然oncomplete事件用处很广泛,后续我会继续探讨。
1 楼 nighthawk 2012-02-10  
不错,很实用的技巧。
2 楼 yourenyouyu2008 2012-02-10  
思路很精巧,充分利用了oncomplete页面响应后才执行的特点。
提点小改进意见,oncomplete="if(#{hasError}){Richfaces.hideModalPanel('modalPanelid').hide);
},这样就不用在action中些【Richfaces.hideModalPanel('modalPanelid')】这些代码了。并且#{hasError}是通用功能,与具体action无关。
3 楼 xiaojianbo 2012-02-10  
yourenyouyu2008 写道
思路很精巧,充分利用了oncomplete页面响应后才执行的特点。
提点小改进意见,oncomplete="if(#{hasError}){Richfaces.hideModalPanel('modalPanelid').hide);
},这样就不用在action中些【Richfaces.hideModalPanel('modalPanelid')】这些代码了。并且#{hasError}是通用功能,与具体action无关。


很好,这样以后更好维护了,复用性不错。