Usando o beanutils a conversão será feita, mas caso haja algum tipo de conversão errada, uma exceção será lançada e o processo de conversão é interrompido. O retorno do método 'populate' é void.

 

Perhaps the biggest problem is that the RequestProcessor calls populate() on the BeanUtils

class instead of directly calling its setProperty() method. The populate() method simply iterates

a Map of request values and calls setProperty() for each non-null key. The problem is that

if a ConversionException is thrown during the call to setProperty(), the iteration is short-circuited

because populate() doesn't catch the exception. And even if it did catch ConversionExceptions,

there would be no way to provide information to the calling method about failed

conversions because the return type is void.

 

Ou seja, pra não perder tempo, você pode refazer o método populate do beanutils de forma que esta dê um feedback das conversões que deram erradas.

Exemplo:

ActionErrors populate(Object bean, Map map)

 

Dessa forma, o que deu pra converter foi convertido, e o que não deu certo vc sabe pelo retorno.

 

-----Mensagem original-----
De: Felipe Vieira Silva [mailto:[EMAIL PROTECTED]
Enviada em: sexta-feira, 28 de janeiro de 2005 09:08
Para: [EMAIL PROTECTED]org
Assunto: Re: ENC: [cejug-discussao] experiências mais interessant es com core-servlet

 

Ok,

 

bom saber que as dúvidas são compartilhadas por quem tem

coragem/paciência de abrir o capô do struts :)

 

Sim, um pouco mais além:

 

No formulário de publicação de anúncios de emprego, o usuário será

convidado a marcar os conhecimentos desejáveis dos candidatos. Essa

lista de conhecimentos será dinâmica, ou seja, no init do

FrontController será feito uma consulta ao banco para recuperar a

tabela de "skills" - e o conteúdo desta tabela poderá mudar com o

tempo.

 

Ou seja, eu terei um conjunto dinâmico de caixas de seleção que

deverão virar uma lista no Bean.

 

Como fazer para converter de n-campos do formulário para uma lista no bean?

 

Imagino que após o uso do beanutil, eu deverei fazer essa "conversão"

na mão - é isso ?

 

* Estou anexando o formulário atual dos classificados, apenas para

ilustrar. E claro, a coisa toda está em fase de prototipação

pré-modelagem - um tipo de prova de conceito.

 

valeu,

 

   Felipe Gaúcho

 

 

 

 

 

On Fri, 28 Jan 2005 08:55:37 -0300, rubens <[EMAIL PROTECTED]com.br> wrote:

> Gaúcho,

>        O Struts faz uso do commons beanutils para popular seus

> ActionForms(DynaActionForms) extraindo parâmetros do request e populando

> as propriedades desses beans. IMHO, o problema principal é que quando a

> conversão(de uma string para o tipo especificado no bean) não dá certo,

> o valor é perdido e não existe um tratamento de exceções que se possa

> acoplar a esse modelo. Outro problema é que o bean nesse caso tem que

> ser específico, ou seja, deve possuir métodos 'setXXXX' para cada

> propriedade.

> E no caso de se implementar um TO genérico, o beanutils não se aplica.

>

> Veja uma solução para essa deficiência:

> http://www.theserverside.com/articles/content/StrutsLiveCh10/Chapter10-T

> SS.pdf

>

> A outra solução seria implementar um framework ou API para:

> - fazer conversões automáticas string para o tipo real.

> - especificar um esquema de tratamento de exceções nessas conversões.

>

> Pensando mais além:

> - formatação de dados dos beans para a camada de apresentação.

> - geração de beans genéricos populados com dados de teste via arquivo

> XML(DBUnit) para o auxílio em testes unitários.

> - etc.

>

> -----Mensagem original-----

> De: Ivan Romero Teixeira [mailto:[EMAIL PROTECTED]

> Enviada em: sexta-feira, 28 de janeiro de 2005 08:28

> Para: discussao@cejug.org

> Assunto: RES: [cejug-discussao] experiências mais interessantes com

> core-servlet

>

> Gaucho,

>        descobri não faz muito tempo o commons-beanutils (bem, já

> conhecia a

> biblioteca mas nunca tinha me dado ao trabalho de estudar sua API) e

> agora

> estou fazendo uso intensivo dela. Vale só lembrar que a maior parte do

> componente é baseada em reflexão da linguagem, e que se for usada para

> muitos dados pode ter um impacto na performance da aplicação.

>        No seu caso vc pode usar da seguinte forma:

>

>        BeanUtils.populate(new MyBean(),request.getParameterMap());

>

>        Bem, os nomes dos parâmetros da requisição devem bater com o do

> Bean. Se houver parâmetros a mais serão ignorados. Se houverem

> propriedades

> no Bean que não existem no request estas permanecerão com seus valores

> default.

>        Acho que ele resolve qualquer problema de case, mas testa aí e

> diz

> no que deu.

>        []'s!  Ivan R. Teixeira

>

> -----Mensagem original-----

> De: Felipe Vieira Silva [mailto:[EMAIL PROTECTED]

> Enviada em: quinta-feira, 27 de janeiro de 2005 21:19

> Para: discussao@cejug.org

> Assunto: [cejug-discussao] experiências mais interessantes com

> core-servlet

>

> Aos que estão acompanhando a saga dos classificados CEJUG, aí vai uma

> questão um pouco mais sofisticada:

>

> - Recebo um POST do cliente contendo um formulário.

> - Tenho que povoar um Bean com os dados do formulário

>

> Opções:

>

> 0) deixar o struts esconder essa parte de mim (ainda não, depois :) )

> 1) criar um Bean específico para cada formulário (pode ser, mas quando

> o número de páginas aumentar, a manutenção pode se tornar complicada)

> 2) usar "Bean Introspection" em um Filter que está entre a camada de

> apresentação e o FrontController. Este filtro teria a capacidade de

> gerar um bean a partir do formulário, independente da quantidade e

> tipo dos campos do formulário. (sofisticado e trabalhoso, porém um

> desafio interessante - eu acho :) )

>

> A idéia é permitir que o filtro preencha um ben e repasse ao

> FrontController, que por sua vez irá identificar o tipo de requisição

> e passar para o Helper este "bean genérico". O Helper confere/valida

> os dados do bean e dispara o Command, que irá finalmente executar a

> regra de negócio associada ao bean e retornar a próxima página.... O

> Helper pode também fazer um casting do bean genérico para o bean

> específico do serviço, para otimizar as próximas etapas...

>

> Comecei a olhar como fazer e, por sugestão do Régis, estou mexendo no

> pacote "org.apache.commons.beanutils".

>

> pergunta: Alguém já usou o beanutils para criar beans a partir de

> formulários JSP ?

>

> valeu,

>

>   Felipe Gaúcho

>

> ------------------------------------------------------------------------

> ----

> ---------------

>

> Ceara' Java User Group

>

>  Para cancelar sua assinatura, envie um e-mail para:

> [EMAIL PROTECTED]

>

>  Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED]

>

>  Falar com o administrador? e-mail para: [EMAIL PROTECTED]

>

> ------------------------------------------------------------------------

> -------------------

>

> Ceara' Java User Group

>

>  Para cancelar sua assinatura, envie um e-mail para:

> [EMAIL PROTECTED]

>

>  Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED]

>

>  Falar com o administrador? e-mail para: [EMAIL PROTECTED]

>

> -------------------------------------------------------------------------------------------

> Ceara' Java User Group

>

>  Para cancelar sua assinatura, envie um e-mail para: [EMAIL PROTECTED]

>  Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED]

>  Falar com o administrador? e-mail para: [EMAIL PROTECTED]

>

>

Responder a