Vraptor - List - jsp

Eu gostaria de saber com eu recebo uma lista enviada pelo vraptor no jsp, contanto que eu consiga pegá-la novamente em outro métido do jsp;

@Get("/usuarioStart")
public void usuarioStart() {
    lista = dao.getLista();
    result.include("minhalista", lista);
}

// ate aqui ok;

depois eu quero pegar em outro métido

@Get("/usuarioTeste")
public void usuarioTeste(List<Usuario> novalista) {
    .....
}

como eu tenho que colocar no jsp, para que essa lista volte ?

Para vc usar a lista no JSP vc usa uma EL e JSTL.

Não sei se tem como mandar a lista novamente… mas acho q pode sim.

O Lucas(pai do VRaptor) pode te ajudar melhor nisso.

Para mostrar eu uso jstl

<c:forEach var=“aaa” items="${minhalista}">

${aaa.id} ${aaa.nome} ${aaa.email}

até aí tudo bem, mas o que tenho que fazer no jsp pra que essa lista possa ser usada em outro método ?

mas pq vc qr devolver pra um outro método se vc jáh a tem no servidor?

Então, devo estar fazendo algo errado. o Primeiro código que fiz, abaixo, quando dava o redirect, quando entrava no usuarioCadastro, a lista já estava nula. Debugando, percebi que ele sempre entra no UsuarioController e ali a lista já não tem nada.

@Resource
public class UsuarioController {

private Result result;    
private UsuarioDao dao = new UsuarioDao();
private List<Usuario> lista;

public UsuarioController( Result result, List<Usuario> lista ) {
    this.result = result;
    this.lista = lista;
}

@Get("/usuarioStart")
public void usuarioStart() throws SQLException {        
    lista = dao.getLista();
    result.redirectTo(UsuarioController.class).usuarioCadastro( );
}

@Get("/usuarioCadastro")
public void usuarioCadastro() {
    result.include("minhalista", lista);
}

@Get("/usuarioTeste")
public void usuarioTeste() {
    result.redirectTo(UsuarioController.class).usuarioCadastro( );
}

}

Alguém sabe onde está o erro ?

Desculpa a demora Imonqueiro, mas só vi agora

coloca seu construtor assim

public UsuarioController(Result result, UsuarioDAO dao) { 
this.result = result; 
this.lista = new ArrayList<>(); 
this.dao = dao;
} 

não esqueça de anotar a class UsuarioDAO como @Componet, para que o vraptor injete o dao pra vc…

Obrigado Kadu

Aproveitando o tópico

como eu posso recuperar na jsp os valores de um atributo que é uma coleção de outra classe:

Exemplo:


public class Pessoa() {
  private int id;
  private String nome;
  ....

  private Collection&lt;Telefone&gt; telefones;

  public Collection&lt;Telefone&gt; getTelefone() {
    return telefones;
  }
  ...
}

public class Telefone {
  @EmbeddedId 
  private final TelefonePk pk;

  public TelefonePk getPk() {
    return pk;
  }
  ...
}

public class TelefonePk implements Serializable {

  private String numero;
  private String ddd;

  public TelefonePk() {
    super();
  }
  ....
}

Eu achei que fosse algo parecido com

  &lt;c:forEach items="${pessoaList}" var="pessoa"&gt;
    &lt;tr&gt;
      &lt;td&gt;${pessoa.nome }&lt;/td&gt;
      &lt;td&gt;${pessoa.cpf }&lt;/td&gt;
      &lt;td&gt;${pessoa.telefone.pk.numero }&lt;/td&gt;

      ...
   &lt;/c:forEach&gt;

alguém poderia me ajudar???

trodrigo, faça outro c:forEach com pessoa.telefone, ou se tiver um número fixo de telefones, pode usar pessoa.telefone[0], pessoa.telefone[1]…

Apenas demonstrando o que o Bruno disse, ficaria assim:

<c:forEach items="${pessoaList}" var="pessoa">
		<tr>
			<td>${pessoa.nome}</td>
            <td>${pessoa.cpf}</td>
			<c:forEach items="${pessoa.telefones}" var="telefone">
				<td>${telefone.numero }</td>
			</c:forEach>
       </tr>
</c:forEach>

Valeu pela resposta rapida…Só outra coisa…como deveria ser meu get e set?

eu tinha feito desta maneira

	public void setTelefones(HashSet<Telefone> hashSet){
		this.telefones = hashSet;
	}

	public Collection<Telefone> getTelefone(){
		return (List<Telefone>) telefones;
	}

mas gera uma exceptin “Property ‘telefones’ not readable on type java.util.HashSet”

Eu faria dessa maneira

public Collection<Telefone> getTelefones() {
		if (telefones == null) {
			telefones = new HashSet<>();
		}

		return telefones;
}
public void setTelefoness(Collection<Telefone> telefones) {
		this.telefones = new HashSet<>(telefones);
}

Valeu galera, mas vou mudar o mapeamento da Classe Telefone, usar chave composta no Hiberbate já vi que um muito ruim…

Só pra avisar…eu consegui resolver!
O que vocês me passaram funcionou perfeitamente…mais uma vez obrigado!