Olá Amigos,
primeiramente, eu sei que existem diversos tópicos sobre este assunto, porém, eu segui a maioria que encontrei, tanto que já alterei esta parte da minha aplicação diversas vezes, de diversas maneiras diferentes de se fazer, mas continuo com o mesmo erro:
Que é o seguinte:
formulario:selectCliente: Erro de validação: o valor não é válido
formulario:selectProduto: Erro de validação: o valor não é válido
inclusive já implementei os métodos hashcode() e equals() para ambos os beans desses selectOneMenu.
segue abaixo alguns códigos de um dos combos e seu respectivo bean para vocês me ajudarem:
Converter:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package utils;
import bean.Cliente;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.FacesConverter;
import persistencia.dao.AbstractDAO;
/**
*
* @author Administrador
*/
@FacesConverter(value="ConverterCliente", forClass=Cliente.class)
public class ConverterCliente implements javax.faces.convert.Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
return new AbstractDAO().consultar("Cliente", " codigo=" + Integer.valueOf(arg2));
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
return String.valueOf(((Cliente) arg2).getCodigo());
}
}
Bean:
package bean;
// Generated 30/11/2011 23:45:01 by Hibernate Tools 3.2.1.GA
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import persistencia.dao.AbstractDAO;
/**
* Cliente generated by hbm2java
*/
@ManagedBean
@RequestScoped
public class Cliente implements java.io.Serializable {
private int codigo;
private String nome;
private String login;
private String senha;
private Set compras = new HashSet(0);
public Cliente() {
}
public Cliente(int codigo) {
this.codigo = codigo;
}
public Cliente(int codigo, String nome, String login, String senha, Set compras) {
this.nome = nome;
this.login = login;
this.senha = senha;
this.compras = compras;
}
public int getCodigo() {
return this.codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getLogin() {
return this.login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return this.senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Set getCompras() {
return this.compras;
}
public void setCompras(Set compras) {
this.compras = compras;
}
public List<Cliente> getCombo() {
return new AbstractDAO().listar("Cliente");
}
public List<Compra> getClientes() {
return new AbstractDAO().listar("Cliente");
}
@Override
public int hashCode(){
int hash = 17;
hash = 37 * hash + this.codigo;
hash = 37 * hash + (this.nome == null ? 0 : this.nome.hashCode());
hash = 37 * hash + (this.login == null ? 0 : this.login.hashCode());
hash = 37 * hash + (this.senha == null ? 0 : this.senha.hashCode());
return hash;
}
}
Formulário:
<h:form id="formulario" >
<p:panel header="Cadastrar Compra">
<p:messages />
<table>
<tr>
<td><h:outputText value="Cliente"/></td>
<td><h:selectOneMenu id="selectCliente" value="#{compra.cliente}" required="true" requiredMessage="Defina um cliente." >
<f:selectItems value="#{cliente.combo}" var="cliente" itemLabel="#{cliente.nome}" itemValue="#{cliente}"/>
<f:converter converterId="ConverterCliente" />
</h:selectOneMenu></td>
</tr>
<tr>
<td><h:outputText value="Produto" /></td>
<td><h:selectOneMenu id="selectProduto" value="#{compra.produto}" required="true" requiredMessage="Defina um produto.">
<f:selectItems value="#{produto.combo}" var="produto" itemLabel="#{produto.nome}" itemValue="#{produto}"/>
<f:converter converterId="ConverterProduto" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputText value="Quantidade" /></td>
<td><p:inputText id="quantidade" value="#{compra.quantidade}" /></td>
</tr>
<tr>
<td><h:outputText value="Data" /></td>
<td><p:calendar value="#{compra.data}" showOn="button"/></td>
</tr>
<tr>
<td><p:commandButton id="buttonCadastrar" value="Cadastrar" actionListener="#{compra.cadastrar(event)}" /></td>
<td><h:commandButton value="Cadastrar" actionListener="#{compra.cadastrar(event)}" /></td>
</tr>
</table>
</p:panel>
</h:form>