STRUTRS - Ler dados de coleção

Bom dia pessoal,

Como exemplo, eu tenho um form contendo uma coleção desta forma:

private Integer numeroPedido;
private Produto[] colecao = new Produto[0];

public Integer getNumeroPedido() {return numeroPedido;}
public void setNumeroPedido(Integer numeroPedido) {this.numeroPedido = numeroPedido;}

public Produto[] getColecao(){return colecao;}
public void setColecao(Produto[] colecao){this.colecao = colecao;}

A página JSP é assim:

Baseado nestas informações, o que ocorre é que os campos da página são exibidos normalmente com o conteúdo das propriedades codigo e descricao preenchidos, até aí tudo bem.

Quando edito a propridade “numeroPedido” que não é uma colecao, consigo ler o valor alterado no formulário.

Mas quando edito os campos da coleção e realizo um “submit” não consigo ler os valores alterados, sempre tenho como retorno os valores que eu mandei para o browser.

O Struts não deveria atualizar os objetos da coleção automaticamente ?

Alguém poderia me dar alguma dica para resolver isso ??

Muito obrigado

Marcos

Jovem, sua action joga esse colection na sessão??

Mas independente disso, tenta após o UPDATE criar na sua rotina um “refresh”, tipo um reload, jogando novamente essa colection na sessão!!

Olá Robinson, obrigado pela resposta.

Na verdade, a coleção está dentro de um form, inicialmente a coleção está vazia:

public class OrderEditForm extends ActionForm {

 private Produto[] colecao = new Produto[0]; 

 ....

}

Então, a seguinte ação é executada quando carrego a página pela primeira vez:

OrderEditForm orderEditForm = new OrderEditForm();
orderEditForm.reset(mapping, request);

HttpSession httpSession = request.getSession();
httpSession.setAttribute(“orderEditForm”, orderEditForm);

Desta forma, a coleção vazia é carregada na session.

A página possui um botão que ao ser clicado executa uma ação que faz o seguinte:
1 - se a coleção está vazia, carrega os objetos na coleção com um valor qualquer. Na verdade, ainda não tem acesso ao banco nesta parte ainda. Estou apenas testando o retorno dos valores da coleção.
2 - se a coleção não for vazia, lista o conteúdo dos objetos.

O botão executa a seguinte ação:

HttpSession httpSession = request.getSession();

// retorna o form
OrderEditForm orderEditForm = (OrderEditForm)httpSession.getAttribute(“orderEditForm”);

// 1 - se o form não existe na sessao, cria um novo e carrega a colecao com 5 objetos
// somente passa por aqui uma vez

if (orderEditForm.getColecao().length == 0){

orderEditForm = new OrderEditForm();

Produto[] colecao = new Produto[5];
	
Produto prod;

for (int i = 0; i < colecao.length; i++){
prod = new Produto();
prod.setCodigo(i);
prod.setDescricao("PRODUTO " + i);
colecao[i] = prod;
}
	
 orderEditForm.setColecao(colecao);

 httpSession.setAttribute("orderEditForm", orderEditForm);

}

// 2 - caso o form já exista na sessão, recupera a coleção que está armazenada no form.
// Aqui está o problema, quando eu altero o valor de um campo da tela no formulário
// o valor de prod.getDescricao() é sempre o mesmo, ou seja, não retorna o que eu digitei no browse.

Produto[] colecao = orderEditForm.getColecao();
for (int i = 0; i < colecao.length; i++) {
Produto prod = (Produto)colecao[i];
System.out.println("Descricao do produto: " + prod.getDescricao());
}

Alguma outra sugestão ?

Obrigado

Marcos