Como popular objetos complexos usando Struts 2 ModelDriven?

Eu tenho uma action que implementa a interface ModelDriven. Este ModelDriven é um POJO normal, o problema é que um de seus atributos é outro objeto.

Imagine que o meu ModelDriven é um objeto chamado Pessoa e minha pessoa tem um atributo chamado Endereco que é outro objeto. Endereço tem atributos normais, como String, Long e etc.

No JSP quando eu envio o formulário, todas os atributos normais utilizadas, tais como String, int, long em Pessoa são mapeados corretamente, mas todos os dados que devem ser mapeados para endereços não são.

<s:textfield name="nome" id="name" size="25" maxlength="15" />
<s:textfield name="endereco.cep" id="cep" size="9" maxlength="9" />

É assim que eu tento mapear as propriedades. A propriedade nome consigo obtêr corretamente, mas quando se trata de mapear as propriedades no endereço da pessoa esta abordagem não funciona.

O que estou fazendo de errado?

Em tempo, meu atributo Endereço é declarado em Pessoa sendo instanciado, de modo que nunca é nulo.

Desde que, endereco é um atributo de pessoa…

<s:textfield name="pessoa.endereco.cep" id="cep" size="9" maxlength="9" />  

Você até poderia usar esta abordagem

<s:textfield name="endereco.cep" id="cep" size="9" maxlength="9" />  

Mas, para isso, precisa de um atributo endereco na classe que representa tua Action.

Prezado drsmachado,

Se sua action implementa a interface ModelDriven<E>, então seu JSP consegue acessar seus atributos diretamente. No meu caso, eu não precisaria fazer

basta apenas

para acessar o atributo nome do meu POJO Pessoa.

Imaginei que seria o mesmo para objetos complexos. Se eu tenho um outro POJO dentro de Pessoa, no caso Endereco achei que deveria usar a mesma lógica e acessar diretamente Endereco e depois o cep dele da maneira abaixo:

e não

Porém não está funcionando dessa maneira.

Em tempo, nome acaba mapeado corretamente, o problema está em Endereco e seus atributos.

Não funciona = ?
Erro?
Nulo?
Não aparece?

drsmachado,

O erro é que simplesmente não mapeia, os atributos dentro de Endereco ficam nulos.