PROBLEMA JSF ( Validation Error: Value is not valid )

Pessoal,

estou desenvolvendo uma aplicaçao em jsf e está acontecendo um erro que eu nunca vi antes.

Qndo eu clico em um botao, tenho a seguinte msg.

Validation Error: Value is not valid

Tentei debugar, coloquei breackpoints no método desse botao mas o método nao é acionado.

Alguém já teve esse problema?

Abraços

Mostra o formulário JSF.

tem algum campo do seu formulário que está recebendo um valor no permitido.

[quote=DirceuSobrinho]Mostra o formulário JSF.

tem algum campo do seu formulário que está recebendo um valor no permitido.[/quote]

<?xml version="1.0" encoding="ISO-8859-1"?>  
<f:view xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:t="http://myfaces.apache.org/tomahawk" >
	<ui:composition template="/view/common/layout/layout.xhtml">
		<html>
			<head>
				<ui:define name="headerOptions">
					<link rel="stylesheet" href="${facesContext.externalContext.requestContextPath}/view/common/css/style.css" />
				<script type="text/javascript" src="${facesContext.externalContext.requestContextPath}/view/common/js/Utils.js"></script>
				</ui:define>
			</head>
		<body>
			
				<ui:define name="utilityPanel">
					<f:subview id="subUtility">
						<h:form id="formPesquisa" >
							<table>
								<tr>
									<td>
										<h:outputText value="Situação: "/>
									</td>
									<td>
										<h:selectOneMenu id="selectStatus" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.status}">
											<f:selectItems value="#{confirmacaoFeriasBean.listFiltros}" />
										</h:selectOneMenu>
									</td>
								</tr>
								<tr>
									<td>
										<h:outputText value="CPF: "/>
									</td>
									<td>
										<h:inputText maxlength="11" size="15" id="cpfPesquisa" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.cpf}" onkeyup="mascaraApenasDigitos(this);" >
											<f:converter converterId="cpfConverter" /> 
										</h:inputText>
									</td>
								</tr>
								<tr>
									<td>
										<h:outputText value="Nome: "/>
									</td>
									<td>
										<h:inputText size="50" maxlength="150" id="nomePesquisa" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.nomeServidor}"/>
									</td>
								</tr>
								<tr>
									<td>
										<h:outputText value="Ano de exercício: "/>
									</td>
									<td>
										<h:inputText maxlength="4" size="6" id="anoExercicio" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.anoExercicio}" onkeyup="mascaraApenasDigitos(this);" >
											
										</h:inputText>
																				
									</td>
								</tr>
								<tr>
									<td>
										<h:outputText value="Matrícula SIAPE: " styleClass="label"/>
									</td>
									<td>
										<h:inputText size="12" maxlength="8" id="matriculaSIAPE" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.matriculaSIAPE}" onkeyup="mascaraApenasDigitos(this);" >
											
										</h:inputText>
									</td>
								</tr>
								<tr>
									<td colspan="2" align="center">
										<h:commandButton id="pesquisarSolicitacao" action="#{confirmacaoFeriasBean.findSolicitacao}" value="Buscar" />
									</td>
								</tr>
							</table>
						</h:form>
					</f:subview>
				</ui:define>
				<ui:define name="content">
				<h:form id="resultadoPesquisa" >
						<rich:panel id="painelMensagens" rendered="#{! empty facesContext.maximumSeverity}"  >
							<br/><h:messages style="color: red" layout="table" /><br/>
						</rich:panel>
						<rich:panel id="painelDataTable">
							<!--ui:define name="content"-->
			         			<center>  
									<rich:datascroller 
										for="solicitacaoDataTable" 
										maxPages="20" 
										/>   
									<rich:spacer height="30" />  
									<rich:dataTable id="solicitacaoDataTable"
												value="#{confirmacaoFeriasBean.solicitacaoPagedBean.dataModel}" 
												var="solicitacaoFerias"   
												binding="#{confirmacaoFeriasBean.solicitacaoDataTable}"	
												rendered="#{!empty confirmacaoFeriasBean.solicitacaoPagedBean.dataModel}"											    
												rows="20" 
												columnClasses="dataTableTD">
										<h:column>
							    			<f:facet name="header">
							    				<h:outputText id="dataSolicitacaoLabel" value=" Data de solicitação " styleClass="label" />
							    			</f:facet>
							    			<h:outputText id="dataSolicitacao" value="#{solicitacaoFerias.dtSolicitacao}" >
							    				<f:convertDateTime type ="date" pattern="dd/MM/yyyy"/>
							    			</h:outputText>
										</h:column>
										<h:column>
							    			<f:facet name="header">
							    				<h:outputText id="nomeColaboradorLabel" value=" Nome do colaborador " styleClass="label" />
							    			</f:facet>
							    			<h:outputText id="nomeColaborador" value="#{solicitacaoFerias.idVigenciaFerias.idServidor.nmServidor}" />
										</h:column>
										<h:column>
							    			<f:facet name="header">
							    				<h:outputText id="nomeSuperiorLabel" value=" Nome do superior " styleClass="label" />
							    			</f:facet>
							    			<h:outputText id="nomeSuperior" value="#{solicitacaoFerias.idSuperior.nmServidor}" />
										</h:column>
										<h:column>
							    			<f:facet name="header">
							    				<h:outputText id="espacoBranco" value="" />
							    			</f:facet>
							    			
							    			<h:commandButton id="visualizarSolicitacao" action="#{confirmacaoFeriasBean.montarConfirmacaoSolicitacao}" value=" - " immediate="true"/>
							    			
										</h:column>
																		
									</rich:dataTable>
								<table>
									<tr>
										<td>
											<input id="botaoAjuda" type="button" value="Ajuda" onclick="javascript:window.open('${facesContext.externalContext.requestContextPath}/view/ferias/rh/ajudaListarSolicitacao.jsf','SisRH','resizable=yes,scrollbars=yes,status=no,toolbar=no,width=400,height=500');" />
										</td>
									</tr>
								</table>
								</center>
						</rich:panel>
				</h:form>
				</ui:define>
		</body>
		
		</html>
	</ui:composition>
</f:view>

Não sei se é o jeito mais rápido, mas vc pode adicionar uma tag message para cada componente que recebe uma entrada do usuário, tipo:

Aí, o que mostrar o erro, vc já mata!

PS - Para componentes que são populados pelo Backing Bean, isso ocorre também.

[quote=felipeguerra]Não sei se é o jeito mais rápido, mas vc pode adicionar uma tag message para cada componente que recebe uma entrada do usuário, tipo:

Aí, o que mostrar o erro, vc já mata!

PS - Para componentes que são populados pelo Backing Bean, isso ocorre também.[/quote]

Ok, Brother.

coloquei e deu erro no meu

&lt;h:selectOneMenu id="selectStatus" value="#{confirmacaoFeriasBean.confirmacaoFeriasPojo.status}"&gt;
			   &lt;f:selectItems value="#{confirmacaoFeriasBean.listFiltros}" /&gt;
&lt;/h:selectOneMenu&gt;

Vou averiguar qual é o problema.

Será que não é o tipo de dados?

O problema estava no meu método que recupera a lista de situação =]

Já resolvi aqui…

valeu galera!

Poderia postar a solução encontrada ? Estou com um problema semelhante…

Eu sei que faz algum tempo… mas como passei por aqui com o mesmo problema fica uma opção de solução.
No meu caso tive o mesmo retorno de erro e resolvi implementando os métodos ‘hashCode’ e ‘equals’ na classe do Objeto que usava no Converter.

Segue o exemplo da Tag-JSF que gerava o erro:

&lt;h:selectOneMenu id="ddd" value="#{bean.ddd}" style="width: 100%" &gt;
	&lt;f:converter converterId="LTEmissorDddConverter"/&gt;
	&lt;f:selectItems value="#{bean.listaDDD}"/&gt;
&lt;/h:selectOneMenu&gt;

Minha classe Converter:

/**
 * Objeto de conversão de um 'LTEmissorDdd' para o jsf
 * 
 * @author Marcio.Marins
 * @since 29/01/2010
 */
public class LTEmissorDddConverter implements Converter {

	/** Log da classe. */
	private static Logger logger;
	
	private LTEmissorDDD emissorDDD; 
	

	/**
	 * Construtor 
	 */
	public LTEmissorDddConverter() {
		logger = Logger.getLogger(LTEmissorDddConverter.class);
		logger.debug("Inicializando o conversor de LTEmissorDdd.");
	}

	@Override
	public Object getAsObject(FacesContext fContext, UIComponent uiComponent, String value) {
		if (value == null) {
			emissorDDD = null;
		}
		if (value.contains("+")) {
			String[] data = value.split("\\+");
			
			emissorDDD = new LTEmissorDDD();
			emissorDDD.setId(Integer.parseInt(data[0]));
			emissorDDD.setDdd(Integer.parseInt(data[1]));
			emissorDDD.setLocalidade(data[2]);
		}
		return emissorDDD;
	}

	@Override
	public String getAsString(FacesContext fContext, UIComponent uiComponent, Object value) {
		if (value == null) {
			return null;
		}
		String data = null;
		if (value instanceof LTEmissorDDD){
			emissorDDD = (LTEmissorDDD) value;
			data = emissorDDD.getId() + "+";
			data += emissorDDD.getDdd()	+ "+";
			data += emissorDDD.getLocalidade();
						
		} else {
			throw new ConverterException("Erro na conversão, era esperado um objeto do tipo 'LTEmissorDdd'.");
		}
		return data;
}

Agora os métodos que resolveram meu problema na classe da Entidade LTEmissorDDD:
*é só usar o gerador de código do eclipse, hashcode e equals.

/**
 * {@inheritDoc}
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
}

/**
 * {@inheritDoc}
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	LTEmissorDDD other = (LTEmissorDDD) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	return true;
}

Márcio D. Marins

Pesquisando sobre este problema encontrei aqui no forum mesmo a explicação do Rafael Ponte. Este cara sabe mesmo explicar com clareza o porquê das coisas. Parabéns a ele.
http://www.rponte.com.br/2008/02/01/selectonemenu-converter-erro-de-validacao/

Verifique se seu entity manager está com nome de entityManager, e n outro… pelo que vi aqui se tiver outro nome, você tem que especificar no components.xml. (foi oque entendi).

Mudei o meu de “em” pra “entityManager” e deu certo aqui… =D
(tem que usar o <s:convertEntity/> la na view, e <s:selectItems>, n <f:selectItems>).

Bom dia pessoal! Estou com um problema em JSF usando PrimeFaces, será que podem me ajudar? Segue o tópico: http://www.guj.com.br/java/301213-problema-ao-construir-ptree-com-primefaces . Não consegui nenhuma solução ainda! Obrigado!