Bom esse eh 1 erro q eh comum, mas as soluções dos outros nao está funcionando comigo…
Tipo Tenho um Usuario, e ele tem um atributo Colaborador…
Na Aplicação tem Um <h:SelectOneMenu>. Com os Dados do Colaborador. mas sem chance pra adicionar…
criei um Converter
public class ConverterColaborador implements Converter{
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Colaborador c = new Colaborador();
c.setNome(value);
return c;
}
public String getAsString(FacesContext context, UIComponent component, Object classe) {
Colaborador c = (Colaborador) classe;
return c.getNome();
}
}
Mas não Deu Certo, Sobreescrevi os Metodos Equals e hashCode. e Nd Tb…
Alguem tem alguma ideia de Como Arrumar isso, o erro eh
sourceId=j_id3:j_id9[severity=(ERROR 2), summary=(j_id3:j_id9: Validation Error: Value is not valid), detail=(j_id3:j_id9: Validation Error: Value is not valid)]
Esse erro ocorre quando o jsf compara o elemento selecionado no combo com os que estão na lista do combo e não encontra nenhum valor correspondente, portanto, o teste de igualadade desses objetos não está ocorrendo corretamente.
Todas as vezes que eu tive esse problema a causa tinha a ver com o método equals.
Verifique se ele está implementado corretamente.
Experimenta colocar um “break point” no métodos do seu conversor e vê se está tudo certo no seu conversor.
Caso naum seja erro do conversor posta o trecho do sua página.
A melhor maneira é criar uma List (cada SelectItem você precisa informar um value e um id para ser usada na página), e criar um atributo para ler o id selecionado. A utilização de objetos (no caso Colaborador), não é permitida em qualquer h:select.
Ola.Como vcs conseguiram resolver o este problema?eu consigo gerar meu selectonemenu com os valores.Agora quando clico em salvar da este erro…Como arrumar?
Não sei se aplicasse ao seu caso mas no meu corrigo o erro apos ver que estava referenciando o campo de forma errada no mapeamento.
o campo era refenciado como objeto ao inves de Integer.
@ManyToOne @JoinColumn(name=“codProduto”)
private Produto produtos; --------- AQUI ESTAVA COMO NOME CODPRODUTO no qual retornava o valor de erro de conversão por causa da comparação do Hashcode
aconselho usar lista de selectItem pois nela vc pode especificar o value e o label para sua combo !
um ex.:
public List colaboradores;
//getters and setter da lista
public List<SelectItem> getColaboradores() {
if (colaboradores == null) {
colaboradores = new ArrayList<SelectItem>();
}
List<Colaboradores> cola = //aqui aonde vc busca a lista;
colaboradores.clear();
for (int i = 0; i < cola.size(); i++) {
Colaboradores c = cola.get(i);
colaboradores.add(new SelectItem(c.getId,c.getNome)); //aqui a lista de selectItem recebe um colaborador e respectivamente atribui o value e o label. la na tua tag do jsf você chama a lista de selectItem
}
return colaboradores;
}
public void setColaboradores(List<SelectItem> colaboradores) {
this.colaboradores = colaboradores;
}
Consegui resolver o problema do “null Converter”, mas surgiu uma exceção “Validation Error: Value is not valid”.Vi no blog do Rafael Ponte que a solução é implementar os métodos equals() e hashcode().Implementei, o código ta ai em cima, mas continuo com o problema.
Debugando eu vi que ele consegue acessar o converter, busca pelo objeto selecionado mas quando o jsf vai validar usando o método equals, o objeto que chega como parâmetro é um Integer e não o objeto selecionado no combo, daí na comparação dos tipos ele retorna “false”.