No Struts, por que tem que mapear os campos do formulário num xml, quando uso DynActionForms?

[quote=saoj][quote=“Mauricio”]
Não tô conseguindo abrir a página não
[/quote]

O site voltou! Tenta lá agora e me diz o que tu achou do VOFilter:

http://mentawai.lohis.com.br/filters.jsp

[/quote]

Gostei, é bem parecido com o que o WebWork faz, mas você poderia automatizar essa parte de preencher o objeto, tipo criando um filtro e pelas chaves do form ele já populasse o objeto com os parâmetros e executasse a validação, se fosse necessário.

Pois é, o seu argumento de menos arquivos XML não colou, pra usar o Struts com o Validator e o Tiles, eu só preciso de três arquivos. Os arquivos de validação do WebWork não contêm configuração? E eles contém o que?

Essa história de o Velocity ser mais rápido do que o JSP eu nunca vi ninguém comprovar e acho até difícil de acreditar, porque se o JSP é, na verdade, um Servlet, que é o nível “mais baixo” de uma aplicação web em Java, como é que o Velocity, que ainda vai ter que usar o Servlet pra poder enviar as informações vai ser mais rápido do que um JSP, que já é um servlet? Estranho isso.

E eu não vou nem comentar sobre a sua comparação do Struts com Servlets e JSP fazendo tudo.

Me explique qual é a mágica que faz o WebWork tão melhor do que todos os outros, porque eu vi o tópico do CV, assisti a apresentação de slides, li uns pedaços da documentação do WebWork e ainda não vi ele fazer nenhuma mágica, tem um mecanismo rudimentar de IoC (eu prefiro o Spring) e tem a ONGL, que realmente é muito interessante, especialmente pra definir a validação fora do código Java.

Acho que a única coisa que o WebWork tem que me chama atenção, é a possibilidade de fazer testes unitários nos actions fora do container, mas no fim termina não fazendo nem tanta falta assim, porque a lógica não fica dentro dos Actions do Struts mesmo, ele só faz reunir as informações e chamar os objetos responsáveis por executar ela e esses objetos podem ser testados fora do container normalmente.

Talvez, testar a validação fosse uma coisa interessante de se fazer, mas dá pra testar a validação do WebWork fora do container?

1 - Nunca subestime um bom cache
2 - Esse tipo de coisa so da pra saber fazendo testes de performance
3 - A view dificilmente vai ser o seu problema de performance de qqer forma :wink:

A logica de negocios nao fica no controller. Ok, mas e os testes da logica de controle? :wink:

Hmm, nao sei - acho que da, mas pra ser sincero nunca usei a validacao do WW2. Smotaaaaaaaaaaaaaaa!

O VOFilter tenta pegar os parametros e injetar num objeto qualquer via reflection e setters. Logo se vc quer pegar um objeto User dos parametros de input vc usa new VOFilter(User.class). Dessa maneira a action vai receber um value object User devidamente preenchido pelo container/filtro. O VOFilter já vem com o mentawai no pacote org.mentawai.filter.

Uma outra possibilidade seria criar um InjectionFilter, para injetar esses parametros diretamente na action, como o WW faz. Vc definiria os parametros na action e criaria setters para eles. Daí esse filtro injetaria direto ali via reflection, sem problemas. Vou criar esse InjectionFilter e meter no pacote org.mentawai.filter.

O legal disso tudo é que vc pode criar filtros a vontade sem poluir a sua classe principal que é a action. Dessa maneira vc desacopla validação e um monte de outras coisas da sua action que fica limpinha.

Uma sequencia legal de filtros seria.

AuthenticationFilter :arrow: ValidationFilter :arrow: InjectionFilter or VOFilter :arrow: DBConnFilter :arrow: (Qualquer outro filtro)

O DBConnFilter tb é outro que é bem interessante: Ele se encarrega de abrir (ou pegar do pool) uma Connection de DB, disponibiliza para a Action e depois que action é executada ele fecha (ou retorna pro pool) essa conexão. Os filtros são mais legais ainda pois podem modificar uma action antes e após a sua execução. Com o DBConnFilter vc não tem mais que se preocupar em esquecer uma Connection aberta no seu código. O Filtro se encarrega de tudo e te entrega uma conexão limpinha como input.

Esse esquema de filtros (interceptors no WW) é realmente muito poderoso pois desacopla tudo no teu framework.

Estou estudando o esquema de validação com annotations. Parece legal, mas vejo dois problemas:

:arrow: É 1.5 e nem todos os servidores web já utilizam 1.5, o que limitaria o framework

:arrow: (Principal) Ele acopla a validação a uma action específica!

Usando um filtro para validação, vc pode usar esse mesmo filtro para actions diferentes, ou seja, se vc tem uma outra action no seu site que utiliza o mesmo formulário, vc pode usar o mesmo filtro, sem necessidade de duplicar o código. Se o seu formulário tem um campinho a mais, nada te impede de extender esse filtro para adicionar esse campo, ou criar um novo filtro de validação apenas com esse campo e encadear com o outro.

Pra concluir: To achando esse esquema de filtros maravilhoso !!!

O ValidationFilter vai validar diretamente o que vai vir pelo formulário HTML? Porque senão ele ia ter que ficar depois do InjectionFilter. Outra coisa que você deveria levar em consideração é a “transformação” de Strings em outros tipos simples, como Integers, Booleans e essas coisas, uma boa é usar os property editors, como o Spring:

http://java.sun.com/j2se/1.5.0/docs/api/java/beans/PropertyEditor.html

E mais uma coisa, eu to achando esse DbFilter meio “solto” por aí, especialmente porque lá na página do framework você diz que ele não vai fazer tudo. Eu, por exemplo, não usaria esse filtro, porque esse trabalho ficaria pra o meu framework de mapeamento objeto/relacional e eu provavelmente criaria um Filter (da API de servlets) pra fechar as conexões usando ThreadLocal, quando isso fosse necessário. Eu não acho que isso devesse estar aí não, ou pelo menos não como uma coisa “comum” do framework.

Maurício, sempre leio as suas defesas em pró do struts, hehe, eu uso ele ainda em alguns projetos, mas estou com um pé no WW, pq gostei muito da forma de se trabalhar, mas isso não vem ao caso.

Esse tópico está totalmente OFF-TOPIC já, então pq não fazer uma pergunta totalmente fora também? Eu vi vc falando que o WW tem um arquivo para validar cada action, no struts nós definimos tudo no validator.xml, cara, o meu tá enorme, tá difícil de mexer nele, tudo bem vc vai me dizer para modularizar tudo, mesmo assim eu teria alguns arquivos com mais ou menos uns 10 actionforms para serem validados, vc usa alguma ferramenta pra te ajudar a “se encontrar” no seu validator.xml ou modulariza até mesmo os módulos? sério cara, eu to me perdendo no meu struts-config e no validation… =o(

Eduardo,

O que vc achou do esquema de validação do Mentawai (http://mentawai.lohis.com.br/validation.jsp) sem XML e usando Java puro?

[quote=eduardo_lopes]Maurício, sempre leio as suas defesas em pró do struts, hehe, eu uso ele ainda em alguns projetos, mas estou com um pé no WW, pq gostei muito da forma de se trabalhar, mas isso não vem ao caso.

Esse tópico está totalmente OFF-TOPIC já, então pq não fazer uma pergunta totalmente fora também? Eu vi vc falando que o WW tem um arquivo para validar cada action, no struts nós definimos tudo no validator.xml, cara, o meu tá enorme, tá difícil de mexer nele, tudo bem vc vai me dizer para modularizar tudo, mesmo assim eu teria alguns arquivos com mais ou menos uns 10 actionforms para serem validados, vc usa alguma ferramenta pra te ajudar a “se encontrar” no seu validator.xml ou modulariza até mesmo os módulos? sério cara, eu to me perdendo no meu struts-config e no validation… =o([/quote]

Num tem muito jeito não :lol:

Eu não uso uma “ferramenta” pra me ajudar não, na verdade eu baixei novo Exadel Studio e vou começar a mexer nele agora, pelas features, ele faz um bocado de coisas, mesmo sendo gratuito.

Eu faço tudo usando o editor de XML do Eclipse mesmo e as vezes da muito trabalho de encontrar as coisas mesmo. Pra resolver isso, eu tenho o validation.xml (de cada módulo) cheio de comentários, tipo “ActionForms da administração de notícias”, “ActionForms do controle de usuários” e assim eu vou me achando dentro do arquivo. Mas eu realmente gostaria de poder dividir isso também, dentro de cada módulo.

Tá aí, vou pedir essa feature pro pessoal do Struts :mrgreen:

Sérgio, achei legal as tags no jsp, muito simples de entender, o esquema de validação está muito bom também, mas acredito que pra vc agradar a todos deveria possibilitar fazermos a validação em arquivos xml também, eu particularmente, apesar de estar achando ruim me encontrar no struts validator, por causa do tamanho do arquivo, gostei do esquema do WW que é um arquivo xml para cada action.

Eu já venho acompanhando as discussões sobre o seu esquema de validação e eu gosto de fazer isso em xml, porque posso mudar uma regra sem ter que compilar novamente, e ao meu ver, quando se trata de um sistema na web, a recompilação se torna um problema, por causa do deploy que temos que fazer com o arquivo .war

Mesmo assim, achei muito simples como a validação é feita no mentawai, simples no sentido de ser fácil para o desenvolvedor :wink: .

[]'s

Obrigado pelo comentário Eduardo!

Só não consigo assimilar a vantagem que vc alega para o XML.

  1. Com XML tb temos que restartar o web server quando alteramos o XML, logo dá no mesmo. Com Java vc além de restartar tb é obrigado a recompilar. MAS COMPILAR É ALGO MARAVILHOSO. Te permite pegar erros cedo, concorda?

  2. Quanto ao war, com XML vc tb não precisaria regerar o war ??? Claro que não, pois vc pode ir direto no XML e alterá-lo. Com Java tb! Vc pode ir direto na classe, alterá-la e recompilar apenas ela. O único pormenor que vejo é se suas classes estiverem dentro de um jar. Daí vc teria que regerar o Jar. Mas não sei se nesse caso tb os seus XML estariam dentro do mesmo jar, o que no final das contas daria no mesmo.

Concorda que esse argumento de “ter que recompilar o Java” não é muito forte? Sei lá, apenas a minha opinião. Se achar diferente tudo bem.

:wink:

Hmm, nao sei - acho que da, mas pra ser sincero nunca usei a validacao do WW2. Smotaaaaaaaaaaaaaaa![/quote]

opa … dá sim, 100% e sem problemas. Os validadores são uma implementação de uma interface beeem simples. mais…

Posso ter perdido alguma coisa aqui … mas é possível fazer o gerenciamento para recarregar as configurações do XML quando o arquivo for atualizado, não é? (é sim :? )

Usando classes fica mais xarope pq vc suja a mão com os class loaders.

Verdade sérgio, é que eu não gosto de trocar apenas as classes que foram alteradas, acho que a chance de erro é grande, talvez por causa de uma dependencia a uma classe que não existia na outra, mas cada caso é um caso.

XML, vamos lá, eu poderia deixar para o carinha que faz os JSPs realizar as validações num arquivo XML, coisa que ele não iria conseguir trabalhando numa classe Java, ou até mesmo levar o software a uma reunião com o usuário e num certo momento ele perceber que um certo campo deveria possuir uma validação, coisa que ele não havia previsto anteriormente, isso é comum, poderia alterar facilmente, até mesmo o analista de sistemas, e demonstrar para o usuário no ato, e várias outras alternativas, eu ainda acho válida a idéia de realizar as validações no XML e não em classes.

Como alguem faz isso com WW ou Struts ??? É algo simples e fornecido pelo framework ou requer alguma pirueta do desenvolvedor? :smiley: