Perdendo valores de objetos no Struts2.x

Bom dia a todos.
Bom eu estou utilizando o struts2.x e estou com o seguinte problema:
Eu tenho minha Action:

public class MinhaAction extends ActionSupport{
   private List pessoas;
}

Bom, quando eu entro na minha tela jsp, a lista está nula. Eu dou o submit com a lista preenchida e debugando minha classe eu vejo que ela foi populada. Só que o meu submit direciona à mesma página, então quando eu dou um novo submit ou mesmo F5, a lista de pessoas fica nula. Ou seja, sempre q dou uma nova requisição na action a lista recebe null. No struts 1.x os meus atributos ficavam no FormBean e eu não perdia esses valores, alguém sabe como eu resolvo esse problema? Valeu. Abraço.

Teu objeto deve estar configurado para existir somente na requisição (request)… Configure o mesmo para ficar na sessão do usuários (session) que esse problema não acontece…

[]s

Oi Elton, acredito que seja isso sim, mas você sabe se têm alguma configuração que eu faça para deixar meus objetos na sessão ao invéz da request?
Pq eu não queria setar toda hora todos os objetos na sessão usando:

Se souber me da uma ajuda aew.
:slight_smile:
Abraço.

Cara no webwork, vc implementa SessionAware e cria um atributo na Action: Map Session. Que se num me engano a session é injetada via IoC para vc na action. depois é só session.put(…)… Imagino q no struts 2 seja assim tb…

Tecnoage, muito boa a dica, vou dar uma olhada sim. Abraço e obrigado de novo! :slight_smile:

Sem querer ser chato, mas posta por favor se der certo… rs

Tecnoage,
Vou testar depois do almoço aew eu te aviso. ehhe Abraço.

Oi Tecnoage.
Infelizmente não funcionou sabe porque.
Olha como funciona minha ação:

Tela 1 : Informe o e-mail!
Quando o cara informa o email e da o submit, a action pesquisa a pessoa pelo e-mail e armazena numa lista todos os cursos dela.

Tela 2: Exibo os dados da pessoa e os cursos que foram pesquisados. Então eu realizo um submit pra executar qualquer outro método da minha mesma action e a lista de cursos está vazia. O problema é que esse atributo não é algo que eu vou trabalhar no jsp, ele é somente um atributo para eu exibir no jsp. Mas eu não posso perdê-lo a cada request.

Eu ainda estou tentando encontrar uma solução que ão seja setar meus objetos na sessão sempre. :(. Pq se tiver q ser dessa forma o webwork/struts2 não me deixou muito feliz. rs… Abraço.

Ah agora entendi o problema rsrsrs Bom vou dar uma olhada por aqui se conseguir posto…blz? pergunta: Se vc não quer armazená-lo na sessão, terá que armazená-lo em algum lugar ou buscar no banco novamente, certo? De onde vc gostaria de buscar esses objetos, no caso essa lista de cursos? vc poderia encadear a action talvez…

Eh pq funciona assim.
A primeira vez q eu entro na tela eu pesquiso os cursos do banco.
Até aí tah beleza. Agora no meu jsp eu posso adicionar um novo curso. Daí quando adiciono o curso eu dou o submit chamando o método addNewCurso(). Assim:

Curso c = new Curso();
c.setNome(nomeDigitadoNoJsp);
c.setArea(areaDigitadaNoJsp);
...
//AGORA QUE EU ME FODO OH:
getCursos().add(c);

O Problema é que neste momento o getCursos está vindo nulo, pois ele criou a lista de cursos na request anterior deste submit. Só q eu não quero q ele suma nãoooo :(… rs…

Eu vou tentar fazer assim aqui:
Na primeira vez eu crio uma lista de cursos e armazeno o id numa lista e essa lista fica como hidden no jsp. Aew no submit de adicionar, eu pego essa lista hidden + o novo curso do cara.
Bom eu vou tentar fazer aqui, mas q deu MMMtooo mais trabalho q um formbeam deu viu. :slight_smile:

Se souber de algo melhor aew me fala.
Abraço.

Cara, pensei em algo, mas num testei, pq aki na empresa não tenho o ambiente pra testar… Pensei. uma vez que você passou essa lista e a exibiu num JSP, ela pode estar na OgnlValueStack, da qual vc pega os valores para exibir no JSP. Na action, ao invés de armazenar na sessão ou em hidden o id, pegue de uma actionInvocation o que vc armazenou na stack da view, mais ou menos assim: OgnlValueStack stack = invocation.getStack(); onde invocation é a ActionInvocation. Ufa, acho q dessa vez funciona… rs em último caso, faça um interceptore jogue no interceptorStack. esse interceptor pegaria qualquer atributo da OgnlValueStack e repassaria para a Action. embora eu tenha quase certeza que isso jah existe em alguma obscuridade do framework.

Tecnoage, amanhã, eu vou terminar aqui do jeito que eu estava fazendo, se não der eu tento do jeito que você falow.
Valeus pela ajuda e até amanhã
eheh
abraço.

Blz!