modalPanel fechando mesmo com validação pendente

Olá pessoal.

Eu tenho um modalPanel, onde eu valido alguns campos e quando eu clico no botão de confirmação o modalPanel é fechado, mesmo tenho campos com erro de validação.
O correto pra mim seria o modalPanel fechar só quando todos os campos estiverem OK…

Estou usando JSF 1.2 + RichFaces

Segue o código

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Adicionar Cotação</title>

<!--Chamada ao arquivo CSS -->
<link rel="StyleSheet" type="text/css" href="css/estilos.css"
	media="screen">
<style type=text/css>
		.msgErro {
			font-size: 12px;color:red
		}
		.titulo {
			font-weight: bold
		}
		
		.cabecalho {
			text-align: center;
			font: 11px Arial, sans-serif;
			font-weight: bold;
			color: #FFFFFF;
			background-color: #008B45;
		}
		
		.tableFirstLine {
			text-align: center;
			background: none repeat scroll 0 0 #F9F9F9;
			border-top: 1px solid #BBBBBB;
		}
 
		.tableNextLine {
			text-align: center;
			background-color: #C1FFC1;
			border-top: 1px solid #BBBBBB;
		}
		
		
	</style>

</head>
<body>

	<f:view>

		<rich:panel header="Sistema de Cotação Milano">

			<rich:tabPanel switchType="client">

				<div align="right">
						<form action="../../j_spring_security_logout" method="post">
							<h:commandButton value="Sair" type="submit"/>
						</form>
					</div>
				
				<a4j:form id="form1">

					<table border="1" align="center">
						<tr bgcolor="#CFCFCF" align="center">
							<td align="center"><h:outputText value="Solicitação" />
							</td>
							<td align="center"><h:outputText value="Data da Solicitação" />
							</td>
							<td align="center"><h:outputText value="CodPro" />
							<td align="center"><h:outputText value="Produto" />
							<td align="center"><h:outputText value="Derivação" />
							<td align="center"><h:outputText value="UN" />
							<td align="center"><h:outputText value="Quantidade" />
							<td align="center"><h:outputText value="Previsão" />
							<td align="center"><h:outputText value="Depósito" />
							<td align="center"><h:outputText value="Observação" />
						</tr>
						<tr align="center">
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.numsol }" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.datsol }" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.codpro}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.despro}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.desder}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.unimed}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.qtdsol}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.datprv}">
										<f:convertDateTime pattern="dd/MM/yyyy" />
									</h:outputText>
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.coddep}" />
							</td>
							<td align="center"><h:outputText
									value="#{solicitacaoMB.solicitacao.obssol}" />
							</td>
						</tr>
					</table>

					<a4j:region>
						<div style="position: absolute; top: 15%; left: 50%;">
							<a4j:status id="status">
								<f:facet name="start">
									<h:panelGrid>
										<h:column>
											<h:graphicImage value="/images/loader.gif" />
										</h:column>
										<h:column>
											<h:outputText value="Aguarde..."
												style="text-size:30px; font-family: Arial; font-weight: bold" />
										</h:column>
									</h:panelGrid>
								</f:facet>
							</a4j:status>
						</div>
					</a4j:region>


				</a4j:form>
				
				<h:form id="form_cot">
						<a4j:commandButton value="Voltar" id="voltar_cotacao"
							status="status" action="ini_addcot"
								immediate="true" />
							
				</h:form>
				
				<p></p>
				<h:outputText value="COMPRAS - ÚTIMAS 10 ENTRADAS" styleClass="titulos" />
				<h:outputText />

				<h:panelGrid columns="3">

					<a4j:form id="mostrarcompra" rendered="true">
						<rich:dataTable value="#{cmb.listaCompra}" var="c" width="1400">

							<rich:column width="3%" style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODFIL" />
								</f:facet>
								<h:outputText value="#{c.codfil }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODFOR" />
								</f:facet>
								<h:outputText value="#{c.codfor }" />
							</rich:column>

							<rich:column>
								<f:facet name="header">
									<h:outputText value="FORNECEDOR" />
								</f:facet>
								<h:outputText value="#{c.nomfor }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="ORIGEM" />
								</f:facet>
								<h:outputText value="#{c.sigufs }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODDER" />
								</f:facet>
								<h:outputText value="#{c.codder }" />
							</rich:column>

							<rich:column>
								<f:facet name="header">
									<h:outputText value="DERIVAÇÃO" />
								</f:facet>
								<h:outputText value="#{c.desder }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="ENTRADA" />
								</f:facet>
								<h:outputText value="#{c.datent }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="QUANTIDADE" />
								</f:facet>
								<h:outputText value="#{c.quantidade }">
									<f:convertNumber pattern="#0.000" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="PREÇO UNITÁRIO" />
								</f:facet>
								<h:outputText value="#{c.preuni }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>

							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="%ICMS" />
								</f:facet>
								<h:outputText value="#{c.pericm }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="ICMS" />
								</f:facet>
								<h:outputText value="#{c.vlricm }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="PIS" />
								</f:facet>
								<h:outputText value="#{c.vlrpis }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="COFINS" />
								</f:facet>
								<h:outputText value="#{c.vlrcor }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="IPI" />
								</f:facet>
								<h:outputText value="#{c.vlripi }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="SUBS.TRIB." />
								</f:facet>
								<h:outputText value="#{c.vlrstp }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="VALOR LÍQUIDO" />
								</f:facet>
								<h:outputText value="#{c.vlrliq }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

						</rich:dataTable>

						<rich:message for="mostrarcompra" />

					</a4j:form>

				</h:panelGrid>

				<!-- Iniando busca das vendas -->

				<h:outputText value="VENDAS - ÚLTIMOS 30 DIAS" styleClass="titulos" />
				<h:outputText />

				<h:panelGrid columns="3">

					<a4j:form id="mostrarvenda">
						<rich:dataTable value="#{cmb.listaVenda}" var="v">

							<rich:column width="3%" style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODFIL" />
								</f:facet>
								<h:outputText value="#{v.codfil }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODRAM" />
								</f:facet>
								<h:outputText value="#{v.codram }" />
							</rich:column>

							<rich:column>
								<f:facet name="header">
									<h:outputText value="RAMO" />
								</f:facet>
								<h:outputText value="#{v.desram }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="CODDER" />
								</f:facet>
								<h:outputText value="#{v.codder }" />
							</rich:column>

							<rich:column>
								<f:facet name="header">
									<h:outputText value="DERIVAÇÃO" />
								</f:facet>
								<h:outputText value="#{v.desder }" />
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="QUANTIDADE" />
								</f:facet>
								<h:outputText value="#{v.quantidade }">
									<f:convertNumber maxFractionDigits="2" minFractionDigits="2"
										type="number" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="Preço Médio Unitário de Venda" />
								</f:facet>
								<h:outputText value="#{v.premed }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="VLRICM VENDA" />
								</f:facet>
								<h:outputText value="#{v.vlricm }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>

							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="VLRICM COMPRA" />
								</f:facet>
								<h:outputText value="#{v.valor_icms_compra }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>

							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="%ICMS" />
								</f:facet>
								<h:outputText value="#{v.percentual_icms }" />

							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="VLRPIS" />
								</f:facet>
								<h:outputText value="#{v.vlrpis }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="VLRCOR" />
								</f:facet>
								<h:outputText value="#{v.vlrcor }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="PIS COMPRA" />
								</f:facet>
								<h:outputText value="#{v.pis_compra }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="COFINS COMPRA" />
								</f:facet>
								<h:outputText value="#{v.cofins_compra }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="ICMS COMPRA" />
								</f:facet>
								<h:outputText value="#{v.icms_compra }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

							<rich:column style="text-align: center;">
								<f:facet name="header">
									<h:outputText value="PREÇO LÍQUIDO DE VENDA" />
								</f:facet>
								<h:outputText value="#{v.preliq }">
									<f:convertNumber type="currency" maxFractionDigits="2"
										minFractionDigits="2" />
								</h:outputText>
							</rich:column>

						</rich:dataTable>

						<rich:message for="mostrarvenda" />

					</a4j:form>

				</h:panelGrid>

			</rich:tabPanel>
		</rich:panel>

		<rich:panel header="Cotação">
			<a4j:commandLink id="cadastrar" value="Cadastrar Cotação">
				<rich:componentControl attachTo="cadastrar" operation="show"
					event="onclick" for="painelcadastro" />
			</a4j:commandLink>
			<p></p>
		
			<rich:modalPanel id="painelcadastro" autosized="true">
				<f:facet name="header">
					<h:outputText value="COTAR PRODUTO" />
				</f:facet>
				<f:facet name="controls">
					<a4j:commandLink value="Fechar" id="fechar">
						<rich:componentControl attachTo="fechar" operation="hide"
							event="onclick" for="painelcadastro" />
					</a4j:commandLink>
				</f:facet>

				<h:form id="modalCadastro">

					<h:panelGrid columns="2">
						<h:outputText value="Solicitação" styleClass="titulo" />
						<h:outputText value="#{cmb.cotacao.usu_numsol }" />
					</h:panelGrid>
<hr />
					<h:panelGrid columns="3">

						<h:outputText value="Fornecedor" styleClass="titulo"/>
						<h:selectOneMenu id="fornecedor_cotacao"
							value="#{cmb.cotacao.usu_codfor}" required="true"
							requiredMessage="Campo Fornecedor obrigatório!">
							<f:selectItem itemValue="" itemLabel="Selecione um fornecedor" />
							<f:selectItems value="#{pmb.listaFornecedor}" />
						</h:selectOneMenu>
						
							<h:outputText value=" " />
							
						<h:outputText value="Produto" styleClass="titulo"/>
						<h:outputText id="produto_cotacao" value="#{cmb.cotacao.produto }" />

							<h:outputText value=" " />

						<h:outputText value="Derivação" styleClass="titulo"/>
						<h:selectOneMenu id="derivacao_cotacao"
							value="#{cmb.cotacao.usu_codder}" required="true" requiredMessage="Campo derivação obrigatório!">
							<f:selectItem itemValue="" itemLabel="Selecione uma derivação" />
							<f:selectItems value="#{solicitacaoMB.listaDerivacoesVerificadas}" />
						</h:selectOneMenu>

							<h:outputText value=" " />

						<h:outputText value="Condições de Pagamento" styleClass="titulo"/>
						<h:selectOneMenu id="condicao_cotacao"
							value="#{cmb.cotacao.usu_codcpg}" required="true"
							requiredMessage="Campo Condições de Pagamento obrigatório!">
							<f:selectItem itemValue="" itemLabel="Selecione uma condição" />
							<f:selectItems value="#{cmb.listaCondicoes}" />
						</h:selectOneMenu>

							<h:outputText value=" " />

						<h:outputText value="Quantidade" styleClass="titulo"/>
						<h:outputText id="quantidade_cotacao"
							value="#{solicitacaoMB.solicitacao.qtdsol }" />

							<h:outputText value=" " />

						<h:outputText value="Valor" styleClass="titulo"/>
						<h:inputText id="valor_cotacao" value="#{cmb.cotacao.usu_precot }"
							required="true" requiredMessage="Campo Valor obrigatório!" />

							<h:outputText value=" " />
						
						<h:outputText value="PREVISÃO" styleClass="titulo" />
						<rich:calendar value="#{cmb.cotacao.usu_datprv}" id="previsao_cotacao"
							datePattern="dd/MM/yyyy" validator="#{cmb.validateDate }" validatorMessage="Previsão inválida!"/>

							<h:outputText value=" " />

						<h:outputText value="Observação" styleClass="titulo"/>
						<h:inputTextarea id="observacao_cotacao"
							value="#{cmb.cotacao.usu_txtcot }"/>

						<h:outputText value=" " />
					
						<h:commandButton value="Cotar" action="#{cmb.save }" id="salvarCotacao">
							<a4j:support limitToList="true"
								oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('modalCadastro')}.hide();" />
								
						</h:commandButton>
							

					</h:panelGrid>
					<br />
						<h:message for="modalCadastro" />
					<br />
						<h:message for="modalCadastro:fornecedor_cotacao" />
					<br />
						<h:message for="modalCadastro:produto_cotacao" />
					<br />
						<h:message for="modalCadastro:derivacao_cotacao" />
					<br />
						<h:message for="modalCadastro:condicao_cotacao" />
					<br />
						<h:message for="modalCadastro:quantidade_cotacao" />
					<br />
						<h:message for="modalCadastro:valor_cotacao" />
					<br />
						<h:message for="modalCadastro:previsao_cotacao" />
					<br />
						<h:message for="modalCadastro:observacao_cotacao" />
					<br />

				</h:form>

				<!-- Componente que exibe uma imagem enquanto o processamento é realizado -->

				<a4j:region>
					<div style="position: absolute; top: 65%; left: 75%;">
						<a4j:status id="status">
							<f:facet name="start">
								<h:panelGrid>
									<h:column>
										<h:graphicImage value="/images/loader.gif" />
									</h:column>
									<h:column>
										<h:outputText value="Aguarde..."
											style="text-size:30px; font-family: Arial; font-weight: bold" />
									</h:column>
								</h:panelGrid>
							</f:facet>
						</a4j:status>
					</div>
				</a4j:region>

			</rich:modalPanel>
		

			<!-- Mostrando as cotações existentes para o produto em processo de cotação -->
			<h:message for="mostrarCotacoes" />
			<h:panelGrid columns="3">

				<a4j:form id="mostrarCotacoes" rendered="true">
					<rich:dataTable value="#{cmb.listaCotacaoDoProdutoAtual}" var="co">

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="SOLICITAÇÃO" />
							</f:facet>
							<h:outputText value="#{co.usu_numsol }" />
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="COTAÇÃO" />
							</f:facet>
							<h:outputText value="#{co.usu_numcot }" />
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="CODFOR" />
							</f:facet>
							<h:outputText value="#{co.usu_codfor }" />
						</rich:column>

						<rich:column>
							<f:facet name="header">
								<h:outputText value="FORNECEDOR" />
							</f:facet>
							<h:outputText value="#{co.usu_nomfor }" />
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="CODDER" />
							</f:facet>
							<h:outputText value="#{co.usu_codder }" />
						</rich:column>

						<rich:column>
							<f:facet name="header">
								<h:outputText value="DERIVAÇÃO" />
							</f:facet>
							<h:outputText value="#{co.usu_desder }" />
						</rich:column>


						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="QUANTIDADE" />
							</f:facet>
							<h:outputText value="#{co.usu_qtdcot }" />
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="VALOR" />
							</f:facet>
							<h:outputText value="#{co.usu_precot }" />
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="OC" />
							</f:facet>
							<a4j:commandButton value="GERAR" action="#{cmb.gerarOC}"
								status="statusGerar" ajaxSingle="true">
								<f:setPropertyActionListener value="#{co}"
									target="#{cmb.cotacao}" />
							</a4j:commandButton>
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="PREVISÃO " />
							</f:facet>
							<h:outputText value="#{co.usu_datprv }">
								<f:convertDateTime pattern="dd/MM/yyyy" />
							</h:outputText>
						</rich:column>

						<rich:column style="text-align: center;">
							<f:facet name="header">
								<h:outputText value="CODCPG" />
							</f:facet>
							<h:outputText value="#{co.usu_codcpg }" />
						</rich:column>

						<rich:column>
							<f:facet name="header">
								<h:outputText value="CONDIÇÃO DE PGTO" />
							</f:facet>
							<h:outputText value="#{co.usu_descpg }" />
						</rich:column>

						<rich:column>
							<f:facet name="header">
								<h:outputText value="OBS" />
							</f:facet>
							<h:outputText value="#{co.usu_txtcot }" />
						</rich:column>



					</rich:dataTable>

				</a4j:form>

			</h:panelGrid>
			<a4j:region>
				<div style="position: absolute; top: 65%; left: 75%;">
					<a4j:status id="statusGerar">
						<f:facet name="start">
							<h:panelGrid>
								<h:column>
									<h:graphicImage value="/images/loader.gif" />
								</h:column>
								<h:column>
									<h:outputText value="Aguarde..."
										style="text-size:30px; font-family: Arial; font-weight: bold" />
								</h:column>
							</h:panelGrid>
						</f:facet>
					</a4j:status>
				</div>
			</a4j:region>

		</rich:panel>



	</f:view>
</body>
</html>

Se alguem puder me dar uma força…

Bom dia Daniel,

este tópico deve ajudar:
http://www.guj.com.br/java/249450-resolvido-esconder-modalpanel-no-richfaces