XHTML
<p:selectCheckboxMenu id="multiple"
value="#{medicoBeanView.objetoSelecionado.especialidades}"
label="Especialidades" multiple="true" filter="true"
filterMatchMode="startsWith" panelStyle="width:250px" >
<f:selectItems
value="#{especialidadeBeanView.especialidades}" />
</p:selectCheckboxMenu>
Converter
@FacesConverter(forClass = Especialidade.class) public class
EspecialidadeConverter implements Converter, Serializable{
private static final long serialVersionUID = 1L;
@Override public Object getAsObject(FacesContext arg0, UIComponent arg1,
String codigo) { if (codigo != null && !codigo.isEmpty()){ return
(Especialidade) HibernateUtil.getCurrentSession().get(Especialidade.class,
new Long(codigo)); } return codigo; }
@Override public String getAsString(FacesContext arg0, UIComponent arg1,
Object objeto) { if (objeto != null){ Especialidade c = (Especialidade)
objeto; return c.getIdEspecialidade() != null && c.getIdEspecialidade() > 0 ?
c.getIdEspecialidade().toString() : null; } return null; }
}
Medico Model
@ManyToMany
@JoinTable(name="medico_especialidade",
joinColumns={@JoinColumn(name="idMedico")},
inverseJoinColumns={@JoinColumn(name="idEspecialida")})
private List<Especialidade> especialidades = new ArrayList<Especialidade>();
Especialidade Model
@ManyToMany(mappedBy = "especialidades", cascade = CascadeType.ALL)
private List<Medico> medicos = new ArrayList<>();
Especialidade Controller
public List<SelectItem> getListEspecialidades() throws Exception {
List<SelectItem> list = new ArrayList<SelectItem>();
List<Especialidade> especialidades = super.findListByQueryDinamica(" from Especialidade");
for (Especialidade especialidade : especialidades) {
list.add(new SelectItem(especialidade,especialidade.getNomeEspecialidade()));
}
return list;
}
Especialidade Bean View
public List<SelectItem> getEspecialidades() throws Exception {
return especialidadeController.getListEspecialidades();
}
Erro da pilha
javax.el.ELException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.projeto.model.classes.Especialidade.idEspecialidade
at com.sun.el.parser.AstValue.invoke(AstValue.java:238)
at
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field br.com.projeto.model.classes.Especialidade.idEspecialidade to java.lang.String