六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 32|回复: 0

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

[复制链接]

升级  7.33%

15

主题

15

主题

15

主题

秀才

Rank: 2

积分
61
 楼主| 发表于 2013-1-23 01:51:46 | 显示全部楼层 |阅读模式
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');"/>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表