Закрыть Rich:modalPanel после сохранения правильно

У меня есть форма с кнопкой, которая открывает Rich:modalPanel с другой формой внутри и двумя кнопками внизу; Close а также Save,

  • Close: выполняет onclick="#{rich:component('mp')}.hide() и скрывает модальные панели.
  • Save: проверяет поля форм показывает ошибку, если она не заполнена, если форма правильная, сохраняет в БД. сбросить форму, но не закрывать 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, только если сохранение в порядке?

Всплывающее сообщение об ошибке:

<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 ответа

Решение

Решено:

Просто добавив еще 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}" />

Вы можете использовать атрибут oncomplete a4j:commandButton, лайк

<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');}"
Другие вопросы по тегам