[RESOLVIDO] Primefaces + JSF - Erro no SelectOneMenu - Erro de validação: o valor não é válido

2 respostas
R

Boa tarde galera, tudo certo?

Estou comecando agora com JavaWeb e estou usnado JSF2 + PrimeFaces + Hibernate e estou com este erro quando vou persistir a informacao do SelectOneMenu no banco, ele me retorna um erro apenas no navegador "Erro de validação: o valor não é válido" e nao me mostra nada no eclipse de erro...ja entrei em varios topicos e foruns porem nao consegui selecionar ainda, preciso dar andamento no meu TCC...quem puder ajudar agradeco, vou postar aqui minhas classes...
valew

Beans Estado e Cidade:

@Entity
public class Estado implements Serializable{
	

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Integer codigo;
	
	private String nome;
	private String sigla;
	
	
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSigla() {
		return sigla;
	}
	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

}

_____________________

@Entity
@Table(name="Cidade")
public class Cidade implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Integer codigo;
	private String nome;
	
	@ManyToOne
	@JoinColumn(name="codcid")
	private Estado estado;
	
	
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Estado getEstado() {
		return estado;
	}
	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	
}
MB:
@ManagedBean
@RequestScoped
public class CidadeMB{
	
	private Cidade c = new Cidade();
	private List<Cidade> listaCidade = new ArrayList<Cidade>();
	private List<Estado> listaEstado = new ArrayList<Estado>();
    private List<SelectItem> ListarPaisesCombo = new ArrayList<SelectItem>();
	private DataTable dttable;

	
	
	public String cadastrar(){
		new CidadeDAO().Salvar(c);
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cidade cadastrada com sucesso!",""));
		return "";
	}
	
	public void remover(ActionEvent act){
		new CidadeDAO().excluir(listaCidade.get(dttable.getRowIndex()));
	}
	
	
	
	
	public Cidade getC() {
		return c;
	}
	public void setC(Cidade c) {
		this.c = c;
	}
	public List<Cidade> getListaCidade() {
		listaCidade = new CidadeDAO().listar();
		return listaCidade;
	}
	public void setListaCidade(List<Cidade> listaCidade) {
		this.listaCidade = listaCidade;
	}
	public DataTable getDttable() {
		return dttable;
	}
	public void setDttable(DataTable dttable) {
		this.dttable = dttable;
	}

	public List<Estado> getListaEstado() {
		listaEstado = new EstadoDAO().listar();
		return listaEstado;
	}

	public void setListaEstado(List<Estado> listaEstado) {
		this.listaEstado = listaEstado;
	}

	public List<SelectItem> getListarPaisesCombo() {    
	        List<Estado> lista = new EstadoDAO().listar();  
	          
	        EstadoDAO pd = new EstadoDAO();  
	                  
	        for (int i = 1; i <= lista.size(); i++) {  
	            SelectItem item = new SelectItem();           
	            item.setLabel(lista.get(i - 1).getNome());                        
	            item.setValue(pd.findById(lista.get(i - 1).getCodigo()));  
	            ListarPaisesCombo.add(item);  
	        }  
	                  
	        return ListarPaisesCombo;  
	    }  

	public void setListarPaisesCombo(List<SelectItem> listarPaisesCombo) {
		ListarPaisesCombo = listarPaisesCombo;
	}

}
xhtml:
<h:head></h:head> 
<body>
	<h:form id="form">
    	<p:panel id="painel" header="Cadastro de Cidade">
    	<p:messages id="msgs" autoUpdate="true" closable="true"/>
    		<p:panelGrid columns="2">
    			
    			<h:outputText value="Nome: " />
    			<p:inputText id="nome" value="#{cidadeMB.c.nome}" required="true" onfocus="this.value='';"/>
    			
    			<p:outputLabel for="estado" value="Estado: "/>
    			<p:selectOneMenu id="estado" value="#{cidadeMB.c.estado}" converter="ConverterEstado">
    				<f:selectItem itemLabel="Selecione o Estado" itemValue="0"/>
    				<f:selectItems value="#{cidadeMB.listarPaisesCombo}" />
    			</p:selectOneMenu>
    		</p:panelGrid>
    		<p/>
    		<p:commandButton value="Cadastrar" actionListener="#{cidadeMB.cadastrar}"/>
    	</p:panel>
    </h:form>
</body> 
</html>
Converter:
@FacesConverter(value = "ConverterEstado")
public class ConverterEstado implements Converter{

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		try {
			if (value != null && !value.equals("")) {
				EstadoDAO est = new EstadoDAO();
				return est.findById(Integer.parseInt(value));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
		if (value instanceof Estado) {
			Estado est = (Estado) value;
			return String.valueOf(est.getCodigo());
			}
			return "";
	}
	
	
}

2 Respostas

R

algueem aii conseguiu ver algo?

R

Consegui.
Tive que sobrescrever os metodos hashcode e equal das minhas classes beans (Cidade e Estado).
Resolvido

Criado 5 de março de 2013
Ultima resposta 5 de mar. de 2013
Respostas 2
Participantes 1