Message - modaPanel - RichFaces - a4j

Olá pessoal, estou enfrentando um sério problema com o modalPanel ao tentar atualizar um objeto

Considerando o modalPanel aberto e mostrando as informações de um objeto, se eu deixar propositalmente um inputText vazio, sendo ele obrigatório, e clicar no botão atualizar o modalPanel então se fecha, não mostrando a mensagem de erro. O que é engraçado é que abro novamente o modalPanel referente ao mesmo objeto e está lá mensagem de erro.

Estou tentando encontrar alguma forma de quando existir alguma mensagem de erro forçar com que o modalPanel não seja fechado.

Segue o trecho do código: (Considere que ele está dentro um dataTable e uma column

[b]

<t:column>
<rich:modalPanel id=“mpAtualizaOrdem” resizeable=“false” moveable=“true” width=“500” height=“300” zindex=“0” >
<f:facet name=“header”>
<h:outputText value=“Atualização de Ordem de Compra”/>
</f:facet>

							<a4j:form id="frmAtualizaOrdem" oncomplete="" onbeforedomupdate="return windowclose();" reRender="pnError">
								<h:panelGrid columns="2">
									<h:outputLabel value="Papel Selecionado" styleClass="labelOutputForm"/>					
									<h:inputText id="txtpapel" value="#{ordem.custodia.papel.titulo}" size="50" required="true"/>
									
									<h:outputLabel value="Valor Papel" styleClass="labelOutputForm"/>
									<h:inputText id="txtvalorOrdem2" value="#{ordem.valorOrdemPapel}" size="50" required="true"/>
									
									<h:outputLabel value="Quantidade" styleClass="labelOutputForm"/>
									<h:inputText id="txtquantOrdem2" value="#{ordem.quantidade}" size="50" required="true"/>
									
											
									<h:commandButton value="Atualizar" action="#{listasOrdensAtuaisBean.atualizaOrdem}" />
									<a4j:commandButton id="btnCancelar" value="Cancelar"  oncomplete="Richfaces.hideModalPanel('#{indice}:mpAtualizaOrdem')"/>
									
								</h:panelGrid>
							
								<t:panelGrid id="pnError" >
									<t:message for="txtpapel" />										
									<t:message for="txtquantOrdem2" />
								</t:panelGrid>	
								
							</a4j:form>
							
						</rich:modalPanel>
				</t:column>

[/b]

Olá.

Você pode verificar por javascript se o objeto <h:messages> do teu modalPanel tem algum conteúdo. Caso tenha o formulário não será fechado.

Abaixo segue um trecho do código.

		<script type="text/javascript">
			    function windowClose() {
				    if (document.getElementById('frm:error')==null){
					    Richfaces.hideModalPanel('modal');
				    };
			    };			    
		</script>

No teu modalPanel você precisa do elemento <h:messages>

<h:messages id="error"></h:messages>

Wellington

eu já vi uma ideia parecida com essa, mas a questão é que onde eu devo chamar esta função.

por acaso no evento oncomplete do form ?

Olá.

No meu caso eu chamava essa validação no botão de salvar da tela.

<a4j:commandButton
  id="btnSalvar"
  type="submit"
  value="Salvar"
  tabindex="0"
  title="Salvar"
  action="#{backing.salvar}"
  oncomplete="windowClose();"
  reRender="facetHeader"/>

Adicione no botao que está submetendo o formulario.