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…