Olá,
Estou desenvolvendo um projeto envolvendo JSF 2 + Primefaces 3.3 + Hibernate 4 + CDI, mas quebrando muito a cabeça no momento tentando resolver um problema de validação de um componente SelectOneMenu, onde é exibida a mensagem [size=12]Erro de validação: o valor não é válido[/size].
Pensando na questão da validação, implementei o equals e hashcode no objeto na classe do objeto, mas sem sucesso, sendo que também o conversor retorna um objeto pelo DAO.
Alguém passou por um caso semelhante e conseguiu resolver??
Segue códigos:
Entity
@Entity
public class Area implements Serializable {
private static final long serialVersionUID = 2540606008938164732L;
@Id
@GeneratedValue
private Long id;
@Column(length=30, nullable=false)
private String nome;
@Column(length=50, nullable=false)
private String gerente;
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="area")
private List<Demanda> demandas = new ArrayList<Demanda>();
//GETTERS E SETTERS
//HASHCODE E EQUALS
}
@Entity
public class Demanda implements Serializable{
private static final long serialVersionUID = 7053604534977914318L;
@Id
@GeneratedValue
private Long id;
@Temporal(TemporalType.TIMESTAMP)
private Date dataInclusao;
@Temporal(TemporalType.DATE)
private Date prazo1 = new Date();
@Temporal(TemporalType.DATE)
private Date prazo2;
@Column(length=100, nullable=false)
private String providencia;
@Column(length=255, nullable=false)
private String anotacao;
@Enumerated(EnumType.STRING)
private String status = "A";
@ManyToOne
private Area area;
//GETTERS E SETTERS
Converter
[code]
@FacesConverter(forClass=Area.class)
public class AreaConverter implements Converter{
private AreaDAO areaDao = new AreaDAO();
@Override
public Object getAsObject(FacesContext ctx, UIComponent comp, String value) {
if(value != null) {
Long id = Long.valueOf(value);
return areaDao.buscaPorId(id);
}else {
return null;
}
}
@Override
public String getAsString(FacesContext ctx, UIComponent comp, Object value) {
return String.valueOf(((Area) value).getId());
}
}[/code]
Bean
@Model
public class AreaBean implements Serializable{
private static final long serialVersionUID = 1L;
@Inject
private Demanda demanda;
@Inject
private DAO<Area> areaDAO;
@Produces
@SessionScoped
@Named("areas")
private List<Area> getAreas(){
return areaDAO.listaTodos();
}
//GETTERS E SETTERS
}
XHTML
<h:outputLabel for="area" value="Área"/>
<p:selectOneMenu id="area" value="#{areaBean.demanda.area}" effect="fade">
<f:selectItems value="#{areas}" var="area" itemValue="#{area}" itemLabel="#{area.nome}"/>
</p:selectOneMenu>
Erro
sourceId=j_idt6:area[severity=(ERROR 2), summary=(j_idt6:area: Erro de validação: o valor não é válido), detail=(j_idt6:area: Erro de validação: o valor não é válido)]