RichFaces中如何让ModalPanel在Ajax验证有错误时不关闭

前端之家收集整理的这篇文章主要介绍了RichFaces中如何让ModalPanel在Ajax验证有错误时不关闭前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址http://winnerlxh.iteye.com/blog/770410

ModalPanel在有Ajax刷新请求的时候,一般会关闭,比如验证错误的时候 我自己的解决办法是让ModalPanel的现实与否不与JS有关,完全用conversation中的某个变量想关联,这样当一个ModalPanel显示以后,无论什么Ajax刷新请求都不回让ModalPanel关掉,除非我让他关掉 网上还有两种解决方案,现列举如下。 第一种方法: <ui:define name="body"> <f:verbatim> <a href="javascript:Richfaces.showModalPanel('_panel',{left:'auto',top:'auto'})"> Show Modal Panel </a> </f:verbatim> <rich:modalPanel id="_panel"> <f:facet name="header"> <h:outputText value="test"></h:outputText> </f:facet> <h:form id="mpform"> <a4j:outputPanel ajaxRendered="true"> <h:messages id="error"></h:messages> </a4j:outputPanel> <h:inputText value="#{bean.property}" required="true"></h:inputText> <a4j:commandLink value="click" oncomplete="windowclose();" reRender="test" ></a4j:commandLink> </h:form> </rich:modalPanel> <script type="text/javascript"> //<![CDATA[ function windowclose(){ if (document.getElementById('mpform:error')==null){ Richfaces.hideModalPanel('_panel'); }; }; //\]\]\> </script> </ui:define> 这种方法的思想是,在关闭ModalPanel的时候判断是否有message在里面,如果没有,就关掉,如果ModalPanel里面有message,就让它继续显示着。 第二种方法: 这种方法的前提是,使用Facelets 在模板里面增加这段代码: <a4j:outputPanel ajaxRendered="true"> <h:form style="display:none" prependId="false"> <h:inputHidden id="maximumSeverity" value="#{facesContext.maximumSeverity.ordinal}"/> </h:form> </a4j:outputPanel> 然后在你需要加ModalPanel的页面增加以下这段JS代码: function ajaxRequestContainsErrors() { return document.getElementById("maximumSeverity").value == "2"; } 作用是检查是否包含错误消息 最后在具体的连接或者按钮上增加相应的处理事件: <a4j:commandButton value="Save" action="#{myController.save}" oncomplete="if (!ajaxRequestContainsErrors()) Richfaces.hideModalPanel('myModalPanelId');"/>

猜你在找的Ajax相关文章