Caros Amigos, estou há dias tentando descobrir o porquê do meu validator em um selectOneMenu não funcionar. Será que alguém tem alguma idéia? Já verifiquei os valores enviados e está tudo ok mas o método validator não é executado. Os selectOneMenu vão sendo exibidos a medida que são preenchidos controlados pelo array vetExibir[] Segue abaixo o código, e muito obrigado por qualquer esforço empreendido.
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j”%>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich”%>
<%@ taglib uri=“http://easyfaces.com.br/easyfaces” prefix=“easy” %>
<f:loadBundle basename="actions.prompt" var="msgs"/>
<title><h:outputText value="#{msgs.titulo}"/></title>
<script type="text/javascript" src="../scripts/menu/stmenu.js"></script>
<script type="text/javascript" src="../scripts/outrasFuncoes/funcoesUteis.js"></script>
<div id="container">
<div id="header">
<img src="../images/titulo.gif" width="800" height="100" />
</div>
<div id="menu">
<script type="text/javascript" src=${sessionScope.tipoMenu}></script>
<h:form id="planoOrcFormInterno">
<br>
<br>
<a4j:keepAlive beanName="planoOrcForm"/>
<h:panelGrid id="gridTotal" columns="1" border="1" rules="groups" title="Inclusão do Plano Orçamentário" width="759" style=" height : 249px;">
<f:facet name="header">
<h:outputText value="#{msgs.planoOrcCabecalhoInclusao}" />
</f:facet>
<h:messages globalOnly="true" style="color: red" />
<h:panelGroup>
<h:outputText value="#{msgs.promptGrupoDePesquisa}" />
<h:selectOneMenu valueChangeListener = "#{planoOrcForm.recuperaPIeObjetivos}" id = "grupo" value="#{planoOrcForm.idGrupo}">
<f:selectItems value="#{planoOrcForm.listaDeGrupos}" />
<a4j:support event = "onchange" reRender = "objetivo"/>
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup id="objetivo">
<h:outputFormat id="pi" value=" #{msgs.promptCodPi} {0}" rendered="#{exibirTelaBean.vetExibir[0]}">
<f:param value="#{planoOrcForm.codPi}" />
</h:outputFormat>
<f:verbatim> </f:verbatim>
<h:outputText value="#{msgs.promptCodObjetivo}" rendered="#{exibirTelaBean.vetExibir[1]}"/>
<h:selectOneMenu valueChangeListener = "#{planoOrcForm.recuperaObjetivosInt}" value="#{planoOrcForm.idObj}" rendered="#{exibirTelaBean.vetExibir[1]}">
<f:selectItems value="#{planoOrcForm.listaDeObjetivosConvertidos}" />
<a4j:support event = "onchange" reRender = "objetivoInt"/>
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup id="objetivoInt" >
<h:outputText value="#{msgs.promptCodObjetivoInt} " rendered="#{exibirTelaBean.vetExibir[2]}"/>
<h:selectOneMenu valueChangeListener = "#{planoOrcForm.recuperaAcao}" value="#{planoOrcForm.idObjInt}" rendered="#{exibirTelaBean.vetExibir[2]}" >
<f:selectItems value="#{planoOrcForm.listaDeObjetivosIntConvertidos}" />
<a4j:support event = "onchange" reRender = "acao, nd, area, credEstimado, botoes"/>
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup id="acao" >
<h:outputText value="#{msgs.promptCodAcao}" rendered="#{exibirTelaBean.vetExibir[3]}" />
<h:selectOneMenu id="acaoOneMenu" value="#{planoOrcForm.idAcao}" rendered="#{exibirTelaBean.vetExibir[3]}" style=" width : 313px;">
[color=red]<f:validateLongRange minimum = "10" maximum = "15"/>
<f:validator validatorId = "ValidadorCodigoAcao"/>[/color]
<f:selectItems value="#{planoOrcForm.listaDeAcoesConvertidas}" />
</h:selectOneMenu>
<h:message for="acaoOneMenu" showSummary="true" showDetail="false" style="color: red" />
</h:panelGroup>
<h:panelGroup id="nd" >
<h:outputText value="#{msgs.promptCodND}" rendered="#{exibirTelaBean.vetExibir[3]}"/>
<h:selectOneMenu id="ndOneMenu" value="#{planoOrcForm.idNd}" rendered="#{exibirTelaBean.vetExibir[3]}">
<f:selectItems value="#{planoOrcForm.listaDeNDsConvertidos}" />
<f:validator validatorId = "ValidadorCodigoNd"/>
</h:selectOneMenu>
<h:message for="ndOneMenu" showSummary="true" showDetail="false" style="color: red" />
</h:panelGroup>
<h:panelGroup id="area" >
<h:selectOneRadio value="#{planoOrcForm.area}" rendered="#{exibirTelaBean.vetExibir[3]}">
<f:selectItem itemValue="interna" itemLabel="Area Interna"/>
<f:selectItem itemValue="externa" itemLabel="Area Externa"/>
</h:selectOneRadio>
</h:panelGroup>
<h:panelGroup id="credEstimado" >
<h:outputText value="#{msgs.promptCreditoEstimado}" rendered="#{exibirTelaBean.vetExibir[3]}"/>
<easy:inputCurrency id="credEst"
value= "#{planoOrcForm.credEstimado}"
required="true"
decimalSeparator=","
groupSeparator="."
useValidate="true"
returnDecimal="true"
converterMessage="Valor Inválido!"
rendered="#{exibirTelaBean.vetExibir[3]}" />
<h:message for="planoOrcForm:planoOrcFormInterno:credEst" showSummary="true" showDetail="false" style="color: red" />
</h:panelGroup>
</h:panelGrid>
<br>
<h:panelGrid columns="2" id="botoes">
<h:commandButton type="button" value="Incluir" action="#{planoOrcActions.incluirPlanoOrc}" style=" width : 65px; height : 24px;" rendered="#{exibirTelaBean.vetExibir[3]}"/>
<h:commandButton type="button" value="Cancelar" action="#{planoOrcActions.limparMensagem}" immediate="true" style=" width : 65px; height : 24px;" rendered="#{exibirTelaBean.vetExibir[3]}"/>
</h:panelGrid>
</h:form></div>
<div id="mainContent" style=" width : 800px;">
</div>
<br class="clearfloat" />
<div id="footer" align="center">
<p><h:outputText value="#{msgs.footer}"/></p>
</div>
</div>
</h:form>
</body>
</f:view>
A definição no faces-config
ValidadorCodigoAcao
validators.CodigoAcaoValidator
A classe Validator
public class CodigoAcaoValidator implements Validator
{
private int codAcao;
public CodigoAcaoValidator()
{ System.out.println(">>>>>>>>>>>>>>>>> Instanciou CodigoAcaoValidator");
}
public void validate(FacesContext contexto,
UIComponent componente,
Object valor)
throws ValidatorException
{
System.out.println(">>>>>>>>>>>>>>> Executou método validate de CodigoAcaoValidator");
codAcao = Integer.parseInt(valor.toString());
if (codAcao == 0)
{
//recuperando o texto da mensagem a partir do message bundle
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = context.getViewRoot();
Locale locale = viewRoot.getLocale();
Application app = context.getApplication();
String appBundleName = app.getMessageBundle();
ResourceBundle bundle = ResourceBundle.getBundle(appBundleName, locale);
String texto = bundle.getString("erroValidacaoCodigoAcao");
//FacesMessage mensagem = new FacesMessage
// (FacesMessage.SEVERITY_ERROR, texto, texto);
FacesMessage mensagem = new FacesMessage(texto);
throw new ValidatorException(mensagem);
}
}
}
O Bean planoOrcFor é preenchido com uma List contendo a lista de ações sendo o primeiro da lista um item value = “0” e ItemLabel = “Escolha a ND”.