Dúvida Struts 1

5 respostas
joca_java

E ae pessoal blz?

Gostaria de saber se alguém poderia me ajudar com um problema:

Seguinte:

digamos que eu tenha uma classe pessoa que possui os atributos cpf e nome certo?
Na minha página, estou usando um “logic:iterate” pra percorrer uma lista de pessoas e mostrar em um “html:text”
seus respectivos cpf´s e nomes. O fato de estar em um “html:text”, é porque eu poderia alterar o número do cpf e o nome
se for o caso. Antes de entrar na página, seto no request minha lista e percorro com o iterate. Mas após executar a ação pra
“gravar”, não consigo pegar no form essa lista alterada. Alguém tem alguma idéia como poderia ser feito isso?

Abaixo o código do meu iterate na página:

<logic:iterate id="p" name="pessoaForm" collection="${listaPessoa}" property="listaPessoa"> 
          <html:text name="cpf" property="p.cpf" value="${p.cpf}" indexed="true"/>
          <BR>
          <html:text name="nome" property="p.nome" value="${p.nome}" indexed="true"/>
          <BR>
</logic:iterate>

Não sei se estou fazendo da maneira correta… quando eu tento pegar a lista, através do form, ela está vindo vazia :frowning:

Alguém tem alguma idéia???

Obrigado!

5 Respostas

muldon

Seguinte: quando vc entra na pagina, voce carrega a lista e seta no request. Digamos que esse metodo na sua action é o “load”. Apos o foward vc é cai na pagina e ve a lista carregada. Faz suas alteracoes aciona salvar. Salvar cai num metodo da sua action, digamos “save” que salva e retorna sucesso para a pagina novamente. Nesse momento vc perdeu a lista. No struts 2 existe um metodo que chama prepare(), que é onde vc faz o carregamento das listas, e todo metodo que é acionado, o prepare é invocado antes. No struts 1 nao existe esse metodo mas vc pode cria-lo para que toda invocacao em sua action, carregue suas listas.

Veja, quando voce salvou, e redireicionou novamente pra pagina, o request é outro, entao vc perdeu a lista. Nesse momento vc precisa carrega-la novamente, ou seja, fazer a busca no banco dinovo, ou entao usar sessao. Entenda os momentos, o request é um diferente por submissao.

Espero ter ajudado. Abraco.

joca_java

muldon:
Seguinte: quando vc entra na pagina, voce carrega a lista e seta no request. Digamos que esse metodo na sua action é o “load”. Apos o foward vc é cai na pagina e ve a lista carregada. Faz suas alteracoes aciona salvar. Salvar cai num metodo da sua action, digamos “save” que salva e retorna sucesso para a pagina novamente. Nesse momento vc perdeu a lista. No struts 2 existe um metodo que chama prepare(), que é onde vc faz o carregamento das listas, e todo metodo que é acionado, o prepare é invocado antes. No struts 1 nao existe esse metodo mas vc pode cria-lo para que toda invocacao em sua action, carregue suas listas.

Veja, quando voce salvou, e redireicionou novamente pra pagina, o request é outro, entao vc perdeu a lista. Nesse momento vc precisa carrega-la novamente, ou seja, fazer a busca no banco dinovo, ou entao usar sessao. Entenda os momentos, o request é um diferente por submissao.

Espero ter ajudado. Abraco.

oi muldon… obrigado pela ajuda… talvez não tenha me expressado direito:

Eu altero a lista a aciono meu método para “salvar” certo?

Então, no método salvar tem um breakpoint pra eu ver o que tem na lista… só que quando olho, a lista está vazia entende?
Tô usando form dinâmico… e antes de entrar na página instancio umas 4 pessoas pra setar na lista (no request) pra poder realizar os testes.
A lista aparece certinha… mas aí quando altero a lista na página, e dou um dynaActionForm.get(“listaPessoa”), a lista está vazia.

Isso observando o breakpoint na minha action…

Valeu!

muldon

joca_java veja bem,
se eu entendi bem, vc quer entao modificar a lista na pagina e salva-la é isso ? Bixo, nao tem com fazer isso do jeito que vc quer.
1- Voce carrega a lista e mostra na pagina
2- Voce quer modificar os elementos dessa lista
3- Salvar as modificacoes

Voce precisara fazer um controle elemento a elemento, e o recomendado é usar a displayTag pra isso ( veja documentacao ). Veja como é o controle nos sistemas atuais de listas de elementos nas paginas. O controle é feito um a um, ou seja, vc quer alterar um registro, vc edita ele , e salva aquele registro, e nisso ao salvar a aplicacao submete o formulario que volta com a lista atualizada pois faz uma nova consulta no banco. Entenda, a lista "morreu" no momento que vc carregou ela e disponibilizou na pagina. Ela nao é um bean que vc pode ficar atualizando quando quiser ( pelo menos nao ainda nos frameworks atuais, struts 1 e 2 ). 

 Entendeu ?

Abraco !

joca_java

muldon:
joca_java veja bem,
se eu entendi bem, vc quer entao modificar a lista na pagina e salva-la é isso ? Bixo, nao tem com fazer isso do jeito que vc quer.
1- Voce carrega a lista e mostra na pagina
2- Voce quer modificar os elementos dessa lista
3- Salvar as modificacoes

Voce precisara fazer um controle elemento a elemento, e o recomendado é usar a displayTag pra isso ( veja documentacao ). Veja como é o controle nos sistemas atuais de listas de elementos nas paginas. O controle é feito um a um, ou seja, vc quer alterar um registro, vc edita ele , e salva aquele registro, e nisso ao salvar a aplicacao submete o formulario que volta com a lista atualizada pois faz uma nova consulta no banco. Entenda, a lista "morreu" no momento que vc carregou ela e disponibilizou na pagina. Ela nao é um bean que vc pode ficar atualizando quando quiser ( pelo menos nao ainda nos frameworks atuais, struts 1 e 2 ). 

 Entendeu ?

Abraco !

Huum… beleza Muldon… vou dar uma pesquisada pra ver como resolvo este meu problema. Valeu cara!

Abraço!

noslei

Cara, você conseguiu resolver, to com o mesmo problema

Criado 30 de junho de 2008
Ultima resposta 8 de ago. de 2008
Respostas 5
Participantes 3