Salve galera do GUJ, venho recorrer a vocês por que já tentei todas as soluções que encontrei aqui e ainda não sei qual o problema.
Estou montando um selectOneMenu com JSF 2.1 + Primefaces e estou obtendo os tradicionais erros de conversão
Erro de conversão ao definir o valor ‘’ para ‘null Converter’.
Estão acontecendo em todos os meus selectOneMenu desta página relacionada ao cadastro de Chamado, ou seja, estou tendo erro nos converters em todas as classes. Como exemplo a classe Chamado abaixo:
@Table(name="chamado",schema="chamados")
@Entity
public class Chamado {
@SequenceGenerator(name="seq",sequenceName="chamado_sequence")
@Id @GeneratedValue(generator="seq")
@Column(name="id")
private Long id;
@OneToOne(targetEntity=Atendimento.class)
@JoinColumn(name="atendimento_id")
private Atendimento atendimento;
@Temporal(TemporalType.DATE)
@Column(name="data_abertura")
private Date dataAbertura;
@Temporal(TemporalType.DATE)
@Column(name="data_prazo")
private Date dataPrazo;
@Temporal(TemporalType.DATE)
@Column(name="data_fechamento")
private Date dataFechamento;
@ManyToOne
@JoinColumn(name="item_id")
private Item item;
@ManyToOne
@JoinColumn(name="nivel_prioridade_id")
private NivelPrioridade nivelPrioridade;
@OneToMany(mappedBy="chamado")
private List<Movimentacao> historico;
@ManyToOne
@JoinColumn(name="situacao_id", nullable=true)
private Situacao situacao;
@ManyToOne
@JoinColumn(name="tipo_contato_id", nullable=true)
private TipoContato tipoContato;
@ManyToOne
@JoinColumn(name="solicitante_id")
private Pessoa solicitante;
@ManyToOne
@JoinColumn(name="tecnico_id", nullable=true)
private Tecnico tecnico;
@ManyToOne
@JoinColumn(name="regional_id")
private Regional regional;
private String descricao;
//getters e setters
Na minha view estou motando os selects da seguinte forma:
<h:outputLabel for="categoria">Categoria:</h:outputLabel>
<p:selectOneMenu id="categoria" value="#{chamadoBean.categoria}" converter="categoriaConverter">
<f:selectItems var="cat" value="#{chamadoBean.categorias}" itemValue="#{cat}" itemLabel="#{cat.nome}"/>
<p:ajax event="select" update="item"/>
</p:selectOneMenu>
<h:outputLabel for="item">Item:</h:outputLabel>
<p:selectOneMenu id="item" value="#{chamadoBean.item}" converter="itemConverter>
<f:selectItems value="#{chamadoBean.itens}" var="it" itemValue="#{it}" itemLabel="#{it.nome}"/>
</p:selectOneMenu>
Criei os converters para todos os selects, tais como:
@FacesConverter("categoriaConverter")
public class CategoriaConverter implements Converter{
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
if (valor.trim().equals("")) {
return null;
} else {
try {
Integer id = Integer.parseInt(valor);
return DAOFactory.getCategoriaDAO().pesqiusarPorId(id);
} catch(NumberFormatException exception) {
throw new ConverterException("Erro ao selecionar esta categoria");
}
}
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
if (valor == null || valor.equals("")) {
return "";
} else {
return String.valueOf(((Categoria)valor).getId());
}
}
}
@FacesConverter("itemConverter")
public class ItemConverter implements Converter{
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
if (valor.trim().equals("")) {
return null;
} else {
try {
Integer id = Integer.parseInt(valor);
return DAOFactory.getItemDAO().pesqiusarPorId(id);
} catch(NumberFormatException exception) {
throw new ConverterException("Erro ao selecionar este item");
}
}
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
if (valor == null || valor.equals("")) {
return "";
} else {
return String.valueOf(((Item)valor).getId());
}
}
}
Amigos por favor me ajudem. O que pode estar errado? Já tentei debugar e aparentemente os converters funcionam, mas sempre tenho mensagens de erro de conversão. Existe algum problema com JSF e anotações @ManyToMany da JPA, pois tenho várias classes ManyToMany na aplicação.
Obrigado.