JSF: SelectOneMenu preencher uma collection

2 respostas
W

Olá Pessoal, tenho o seguinte cenário:

Tenho um relacionamento ManyToMany e quero relacionar duas classes.

Exemplo: Aluno () ------- () Matéria. Muitos alunos podem ter muitas matérias.

Fiz um selectOneMenu da classe Aluno apontando para o relacionamento manyToMany:

<p:selectOneMenu id="alunoCB" value="#{alunoBean.aluno.materias}" converter="MateriaConverter">
<f:selectItems noSelectionValue="Selecione" value="#{materiaBean.materias}" var="matSelect" itemValue="#{matSelect}" itemLabel="#{matSelect.nome}" />
</p:selectOneMenu>

PS.: O Converter está definido

Quando eu sobmeto isso ele me retorna o seguinte erro.

Caused by: java.lang.ClassCastException:modelo.Materia cannot be cast to java.util.Collection

Ao meu ver o JSF está tentando converter o objeto que se encontra em “#{matSelect}” (que é do tipo Matéria) em um ArrayList<Matéria>. Quando eu queria que ele fizesse o add no ArrayList que já existe …

@ManyToMany
      private List<Materia> materias = new ArrayList<Materia>();

Utilizando um objeto Materia na classe eu já consegui fazer e também pegando o objeto selecionado e setando diretamente no arrayList já consegui fazer. Gostaria de saber se existe alguma forma de fazer como citado acima.
Muito obrigado pela ajuda desde já

2 Respostas

juno.rr
Dá uma olhada no value do p:selectOneMenu. Lá vc define o método para setar o valor selecionado, não a lista de matérias. Mais ou menos assim:
public void setSelected(Materia m) {
  selected = m;
}

----------------------

&lt;p:selectOneMenu value="#{bean.selected}" ...
>
W
juno.rr:
Dá uma olhada no value do p:selectOneMenu. Lá vc define o método para setar o valor selecionado, não a lista de matérias. Mais ou menos assim:
public void setSelected(Materia m) {
  selected = m;
}

----------------------

&lt;p:selectOneMenu value="#{bean.selected}" ...
>

Assim eu consegui fazer ... Eu queria setar diretamente mesmo ...

Mas muito obrigado pela resposta

Criado 19 de abril de 2013
Ultima resposta 19 de abr. de 2013
Respostas 2
Participantes 2