terça-feira, 28 de junho de 2011

rich:pickList + Seam

Vou demostrar nesse post como utilizar de uma maneira muito simples o rich:pickList com o seam, vou fazer um exemplo de @OneToMany, digamos que um Aluno tem muitas Matérias, o primeiro passo é criar a entity Aluno.

@Entity
@Name("aluno")
public class Aluno implements Serializable {

   private static final long serialVersionUID = 1L;
 
   @Id
   private Integer idAluno;

   @Column(name = "nome")
private String nome;
 
  @OneToMany(fetch = FetchType.LAZY)
private List<Materia> materias = new ArrayList<Materia>();

       //getters and setters
}

@Entity
@Name("materia")
public class Materia implements Serializable {

   private static final long serialVersionUID = 1L;

   @Id
   private Integer id;

   @Column(name = "nome")
   private String nome;

}

Agora vamos popular o lado esquerdo do pickList, nesse caso vamos popular fazendo um Select de todos os Alunos do banco de dados

@Name("materialManagedBean")
@Scope(ScopeType.CONVERSATION)
public class MateriasManagedBean{
 
   private List<Material> origem = new ArrayList<Material>();

   @SuppressWarnings("unchecked")
   public List<Material> listarOrigem() {
origem = entityManager.createQuery("select m from Material m").getResultList();
return origem;
   }
}

Pronto agora temos uma lista de Alunos com todos os alunos do banco de dados, agora vou mostrar como utilizar no pickList para poder transferir de uma List para outra.

<rich:pickList value="#{aluno.materias}"
   <s:selectItems value="#{materialManagedBean.listarOrigem()}" var="_materias"
      label="#{_materias.nome}" />
<s:convertEntity />
</rich:pickList>

O que torna o trabalho mais fácil utilizar pickList no Seam é a presença da taglib do seam <s:selectItems> que já faz a conversão automática sem a necessidade de nenhuma programação extra no backbean o que aconteceria utilizando o convencional <f:selectItems>

Nenhum comentário:

Postar um comentário