关闭Rich:正确保存后的modalPanel

时间:2015-09-08 11:53:14

标签: forms richfaces jsf-1.2 richfaces-modal

我有一个带有按钮的表单,其中打开Rich:modalPanel,内部有另一个表单,底部有两个按钮; CloseSave

  • Close:执行onclick="#{rich:component('mp')}.hide()并隐藏modalPanel。
  • Save:验证表单的字段如果未完成则显示错误,如果表单正确则保存在db中。重置表单但不关闭Rich:modalPanel

我想关闭Rich:modalPanel只有表格没问题并保存但我无法做到。我尝试过:

插入Javascript

<a4j:commandButton value="${msg.guardar}" styleClass="boton" reRender="personaForm" action="#{persona.guardarAuxiliar}" onclick="#{rich:component('mp')}.hide()"/><br />

<a4j:commandButton value="${msg.guardar}" styleClass="boton" reRender="personaForm" action="#{persona.guardarAuxiliar}" oncomplete="#{rich:component('mp')}.hide()"/><br />

仅使用RichFaces

<a4j:commandButton value="${msg.guardar}" styleClass="boton" reRender="personaForm" action="#{persona.guardarAuxiliar}">
    <rich:componentControl for="mp" operation="hide" event="onclick" />
</a4j:commandButton><br />

<a4j:commandButton value="${msg.guardar}" styleClass="boton" reRender="personaForm" action="#{persona.guardarAuxiliar}">
    <rich:componentControl for="mp" operation="hide" event="oncomplete" />
</a4j:commandButton><br />

但是这个代码总是关闭(或隐藏)modalPanel,而不仅仅是保存完成。是否只有在保存正常的情况下关闭此modalPanel的另一种方法是什么?

错误弹出窗口是:

<a4j:outputPanel ajaxRendered="true">
    <h:messages id="error" styleClass="error"></h:messages>
</a4j:outputPanel> 

 <rich:modalPanel id="panel2" width="350" height="100" zindex="4000" showWhenRendered="${persona.hayErrores || persona.exito}">
    <f:facet name="header">
        <h:panelGroup>
            <h:outputText value="${msg.error}" rendered="#{persona.hayErrores}"></h:outputText>
            <h:outputText value="${msg.info}" rendered="#{persona.exito}"></h:outputText>
        </h:panelGroup>
    </f:facet>
    <f:facet name="controls">
        <h:panelGroup>
            <h:graphicImage value="/estilos/general/img/iconos/close.png" style="cursor:pointer" id="hidelink2"/>
            <rich:componentControl for="panel2" attachTo="hidelink2" operation="hide" event="onclick"/>
        </h:panelGroup>
    </f:facet>
     <a4j:outputPanel ajaxRendered="true">
        <h:outputText value="#{persona.listaErrores}" rendered="#{persona.hayErrores}" styleClass="error"/>
        <h:outputText value="#{msg.personaExito}" rendered="#{persona.exito}"/>
      </a4j:outputPanel>
</rich:modalPanel>

2 个答案:

答案 0 :(得分:0)

<强>解决:

只需在显示验证的弹出消息中添加另一个rich:componentControl条件。

// If its wrong, only closes this popup
<rich:componentControl for="panel2" attachTo="hidelink2" operation="hide" event="onclick" rendered="#{persona.hayErrores}" />
// If its ok, closes this popup and 'mp' modalPanel
<rich:componentControl for="panel2,mp" attachTo="hidelink2" operation="hide" event="onclick" rendered="#{persona.exito}" />

答案 1 :(得分:0)

您可以使用a4j:commandButton oncomplete 属性,例如

<a4j:commandButton action="#{persona.guardarAuxiliar}"
                    oncomplete="Richfaces.hideModalPanel('mp')"
                    value="#{msg.guardar}" reRender="personaForm" />

或条件

oncomplete="if (#{!yourAction.hasErrors}) Richfaces.hideModalPanel('mp')"

检查验证错误的经典案例

oncomplete="if (#{facesContext.maximumSeverity == null}) {Richfaces.hideModalPanel('mp');}"