Struts - Pattern

Seguinte pessoal, estou com uma dúvida:
Queria saber se seriam necessários 2 beans para se trabalhar com o Struts.

Vou tentar dar um exemplo:

Eu tenho um bean(ActionForm) PessoaForm com os seguintes atributos:
String nome;
String salario;

E eu precisaria de um bean que seria o espelho do banco de dados tipo
PessoaBean que teria os seguintes atributos:
String nome;
Double salario;

Na minha camada DAO eu utilizaria o PessoaBean e na minha camada View eu utilizaria o PessoaForm.

Alguém tem algum jeito mais fácil de fazer isso?
Tem algum padrão para resolver este problema?
Se isso estiver certo, em que camada eu devo fazer a “cópia” de um bean para outro?

Obrigado.

uma opção seria vc colocar o seu objeto PessoaBean dentro do form, algo do tipo:

public class PessoaForm extends ActionForm{ private PessoaBean pessoaBean; //gets e sets }

depois dentro dos jsp’s, vc tem uma tag html:text, vc usaria:

desta forma o seu obj PessoaBean já viria com os dados preenchidos na action. Não sei se é a melhor forma, mas é uma opção.

[]s

O que você realmente deveria fazer era criar objetos de domínio.

Onde estão as regras de negócio do seu sistema?

Shoes

Na verdade eu tenho uma camada de negócios(bo)…
Seria o fluxo Action -> BO -> DAO

Então rpa que você rpecisaria de um bean? Por que não usar seu objetod e negócio diretamente?

Tudo bem… mas onde entra o ActionForm?
Você está sugerindo para que as regras de negócio fiquem no ActionForm?

Se sua pergunta é se você vait er que ter o FormBean + o objeto de negócio, a resposta é sim.

Shoes

Agora começou a ficar mais claro… na minha classe de negócio eu teria os atributos “quentes” que falei(espelho do banco) e os seus métodos com as regras de negócio… é isso?

Poderia inclusive colocar no construtor da classe BO um actionForm e daí fazer a cópia dos atributos do FormBean?

Quase.

Espelho do banco:
Seu banco de dados deve espelhar seus objetos , não o contrário

Construtor de Cópia:
Absolutamente não. A camada de negócios não deve ter dependência com a camada de apresentação. Você pode, no entanto, ter uma classe utilitária que faça o serviço :wink:

Shoes

OK, o banco deve ser o espelho do bean…

Agora mais uma pergunta, na classe BeanUtils existe um método copyProperties que realiza a cópia de um bean para outro, mas só faz isso se os atributos tiverem o mesmo nome e se forem do mesmo “tipo”, caso contrário tenho que fazer manualmente, como seria o caso do salario String para salario Doble.

Tu conhece outra forma de fazer isso?

Não, mas não é difícil de implementar com reflection ou as classes de JavaBeans, se bobear já tem algo pronto mesmo.

É a minha dúvida maior era se eu deveria utilizar dessa forma, digo, se é assim que o pessoal utiliza o struts…

Mas valeu pela ajuda.