Amigos,
Talvés seja coisa boba mas é que não estou consiguindo iterar no foreach via tag no jsp.
Eu printo o resultado na tela mas o foreach não consegue iterar.
Código java e jsp:
@Path("/login/restoreAll")
public Collection<Usuario> restoreAll() {
try {
logger.info("Listando!");
lista = dao.restoreAll(usr);
List x = new ArrayList();
for(Usuario lst : lista){
x.add(lst);
logger.info(lst.toString());
}
result.include("propriedades", x);
return lista;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Essa redundância que vocês viram no método é porque eu estava procurando o porque de não iterar no jsp.
Favor desconsiderar a redudância.
@Resource
public class LoginController {
private final Result result;
private final UsuarioDao dao;
private final Logger logger = Logger.getLogger(this.getClass()); // assim fica mais fácil de copiar essa linha...
// Por que você passa o <Usuario> para um dao que, pelo nome, só pode ser de Usuário?
public LoginController(Result result, UsuarioDao dao) {// Anote UsuarioDAO com @Component e deixe que o VRaptor entregue-o à vc.
this.result = result;
this.dao = dao;
}
@Path("/")
public void login() {
try {
} catch (Exception e) {
logger.error("Erro ao gravar usuário!", e);// Passe a exception como parâmetro que o logger disponibiliza a stacktrace para você.
// e.printStackTrace();
}
}
@Path("/login/restoreAll")
public void restoreAll() { // Não precisa do retorno pois, na minha opinião, usar o result.include é mais legível.
try {
logger.info("Listando!");
result.include("propriedades", dao.restoreAll());// Teoricamente, você não precisa passar esse usuário já que você vai restaurar TODOS.
} catch (Exception e) { // Não use sempre um catch de Exception... O ideal é você tentar capturar as outras exceptions antes e, só no final, capturar a Exception. Assim você consegue tratar cada uma delas separadamente.
logger.error("Erro ao restaurar os usuários!", e);
// e.printStackTrace();
}
}
}
[quote=Rafael Guerreiro]Eu a mudaria um pouquinho:
[code] @Resource
public class LoginController {
private final Result result;
private final UsuarioDao dao;
private final Logger logger = Logger.getLogger(this.getClass()); // assim fica mais fácil de copiar essa linha…
// Por que você passa o <Usuario> para um dao que, pelo nome, só pode ser de Usuário?
public LoginController(Result result, UsuarioDao dao) {// Anote UsuarioDAO com @Component e deixe que o VRaptor entregue-o à vc.
this.result = result;
this.dao = dao;
}
@Path("/")
public void login() {
try {
} catch (Exception e) {
logger.error("Erro ao gravar usuário!", e);// Passe a exception como parâmetro que o logger disponibiliza a stacktrace para você.
// e.printStackTrace();
}
} @Path("/login/restoreAll")
public void restoreAll() { // Não precisa do retorno pois, na minha opinião, usar o result.include é mais legível.
try { logger.info(“Listando!”);
result.include(“propriedades”, dao.restoreAll());// Teoricamente, você não precisa passar esse usuário já que você vai restaurar TODOS.
} catch (Exception e) { // Não use sempre um catch de Exception… O ideal é você tentar capturar as outras exceptions antes e, só no final, capturar a Exception. Assim você consegue tratar cada uma delas separadamente.
logger.error(“Erro ao restaurar os usuários!”, e);
// e.printStackTrace();
}
}
}
[/code][/quote]
Cara valeu pelas dicas, com certeza vou alterar aqui.
Mas você não sabe nada do problema de não iterar no foreach?