Pessoal,
Tenho um um selectOneMenu assim:
<h:selectOneMenu value="#{produtoController.produto.categoria}" id="categoria">
<f:selectItem itemLabel="Selecione..." itemValue="" noSelectionOption="true" />
<f:selectItems value="#{categoriaController.listaCategorias}"/>
<f:converter converterId="categoriaConverter"/>
</h:selectOneMenu>
Meu Converter está assim:
@FacesConverter(value = "categoriaConverter")
public class CategoriaConverter implements Converter {
public final static String CONVERTER_ID = "sgm.model.Categoria";
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value)
throws ConverterException {
try {
if (value == null || value.equalsIgnoreCase("-1")) {
return null;
}
Integer id = new Integer(value);
return new CategoriaDaoImp().getCategoria(id);
}
catch (NumberFormatException ne) {
throw new ConverterException("Não foi possível converter (" + value + ") para Categoria: não é um número inteiro.", ne);
}
catch (IllegalArgumentException e) {
throw new ConverterException("Não foi possível converter (" + value + ") para Categoria: identificador desconhecido.", e);
}
}
@Override
public String getAsString(FacesContext context, UIComponent componente, Object value) {
if (value == null) {
return null;
}
if (value instanceof Categoria) {
Categoria aux = (Categoria) value;
return aux.getId().toString();
}
else if (value instanceof String && ((String) value).equalsIgnoreCase("-1")) {
return "-1";
}
else {
throw new ConverterException("(" + value.getClass() + ") não é uma instância.");
}
}
}
Na tabela produto, no BD, eu tenho um id_categoria, relacionado com a tabela categoria. Quando eu mando salvar o objeto produto(todas as anotações de relacionamento estão corretas, já testei setando na mão e salva) o id de categoria fica como null na tabela produto, utilizando esse converter. Se eu coloco as opções required e requiredMessage, no selectOneMenu, aparece para mim a mensagem que eu seto, como se eu não estivesse selecionado nenhuma categoria, mas eu seleciono, se eu tiro a opção required, os dados sao persistidos, mas com null para id categoria.
O que pode ser?