Uso do Struts na Prática

quem acompanhou um pequeno topic aqui http://www.guj.com.br/forum/viewtopic.php?t=10827
sabe que eu estou no meio de um desenvolvimento usando Servlet/Velocity/HIbernate e pintou a dúvida de como fazer upload de um arquivo texto. O Amigo Daniel Destro disse que eu poderia estudar Struts (eu já tinha ouvido falar mas nunca tinha estudado) ou usar uma classe do grupo Jakarta. Eu pesquisei os dois e no caso eu usei a classe chamada FileUpload que fica bem simples fazer upload tanto para disco como apenas para memória. Mas mesmo assim eu comecei a estudar o struts e achei alguns pontos MUITO interessantes.

:arrow: Pontos Positivos (claro que eu não estudei ele muito a fundo ainda):
Seu tratamento de erros em preenchimento de formulario é muito simples, comparado ao meio tradicional que é ficar testando manualmente e mostrando o erro na página manualmente.
:arrow: Sua separação de camadas é muito show, pra quem nunca usou MVC model 2, com ele fica bastante simples de entender

Pontos negativos:
:arrow: Quase tudo nele precisa gerar arquivos xml (como servlets), mas no caso do eclipse não achei nenhuma ferramenta que faz isso (para servlet eu uso o Lomboz), a unica que eu encontrei foi o easystruts, mas funciona só no eclipse 2.1.x, e atualmente estou usando o 3M7 e migrando para o 3M8. Existe algum outro plugin?
:arrow: Agora esse é muito crítico. Quando você trabalha com Struts, você tem que usar suas taglibs, por exemplo,tem a taglib de html. Quando for criar um form usa-se html:form, e html:text, html:password, html:submit e assim vai. Qual o problem aqui? o problema que isso não da pra ser feito pelos webdesigner. Na empresa dividimos o máximo possível o designer do desenvolvimento server-side, onde os webdesigners usam o Dreamweaver. No caso do velocity, fica simples eles criarem a pagina e depois com pouco códigos eu coloco as VTL (quando necessário), e depois se precisar de alguma manutenção, eles podem abrir o arquivo .html no dreamweaver que nao irá estragar o designer.
No caso do struts não, pois se eles usam form name="… irão ter que mudar para html:form… e assim o dreamweaver não irá reconhecer, e irá estragar todo o designer. Tudo isso levando em consideração as possíveis alterações (e essas sempre acontecem), pois os designers poderiam fazer usando html normal, e depois eu transformar para taglibs (eu encontrei uma ferramenta que faz isso, só não sei se funciona), mas o problema é quando pintasse uma alteração, por exemplo em um cadastro adicionar mais 3 campos?, ae ficaria uma bagunça total.

Mas acredito que tenha solução, pois muita gente usa, e essas pessoas não podem estar erradas, empresas grandes que tem wedesigners separado de programação usam com sucesso,e elas não querem perder produtividade, então acredito que eu e os membros da empresa não conseguimos enxergar ainda como solucionar esse problema, pois mesmo com as características boas que o Struts tem, esse lance de “quebrar” todo o html, seria muitíssimo ruim para nós, o que dificultaria o trabalho dos designers e assim diminuindo muito o desenvolvimento do projeto ao todo.

Alguém com experiência no caso poderia comentar algo a respeito.

Obrigado

[quote=“ManchesteR”]Pontos negativos:
:arrow: Quase tudo nele precisa gerar arquivos xml (como servlets), mas no caso do eclipse não achei nenhuma ferramenta que faz isso (para servlet eu uso o Lomboz), a unica que eu encontrei foi o easystruts, mas funciona só no eclipse 2.1.x, e atualmente estou usando o 3M7 e migrando para o 3M8. Existe algum outro plugin?
[/quote]

Eu também trabalho com Struts utilizando o Eclipse, eu particularmente não gosto do EasyStruts, para gerar aquele XML chato (struts-config.xml) use o XDoclet (a tag é @struts - http://xdoclet.sourceforge.net/tags/apache-tags.html ) quando você baixa o XDoclet, ele vem com um exemplo de struts, o legal é você baixar o plugin JBossIDE para autocompletar as tags do Struts e também para facilitar a configuração da geração do struts-config.

Eu utilizei o JBossIDE para o Eclipse 2.1.x, mas eu me lembro que tem uma versão para o 3.0 M7

Realmente essa parte do Struts é um saco, aqui os web designers fazem a tela toda bonitinha e nós os programadores transformamos para o struts, eu acho isso uma droga pois eu perco um pouco a produtividade (não gosto de trabalhar com view).

Para transformar uma página html para um jsp+struts eu utilizo o struts console, ele te ajuda em uns 90% da conversão, geralmente ele faz besteira na hora de converter as imagens para as tags de imagem do struts.

O Lomboz até que ajuda um pouco, pois ele pode autocompletar as tags do struts.

Outra ponto negativo no struts é a díficil testabilidade das Actions, já que ela é presa a web, já tentei utilizar o struts test case, mas eu não gostei da ferramenta.

Para resolver esses problemas (principalmente das tags html do struts) eu estou testando o framework spring - http://www.springframework.org/ ele suporta como views JSP (pode ser com JSTL) , XSLT, Velocity e Freemarker (esse é meu preferido) ele vem com exemplos legais.
Para persistência, ele suporta o Hibernate, iBatis, JDBC puro, JDO.

Olha que legal essa parte :

Enquanto no struts eu tenho que colocar um campo texto assim :

<html:text property="nome">

No spring eu coloco assim :

<spring:bind path="cliente.nome">
   <input type="text" name="nome">
</spring:bind>

Onde cliente é minha classe “Command” e nome é o atributo que eu desejo atribuir ao campo html.

Fácil para nós e os web designers não ?

Fora que ele é muito mais fácil de testar pelo JUnit, você pode configurar um arquivo xml para a web e um outro para fazer os testes.

Hummmm

muito interessante esse spring, ele faz um bind com o Command e mantém as tags html.

Valeu pela dica Doulgas, com certeza iremos estudar esse framework, e quem sabe para um projeto futuro, já que o projeto atual já está sendo feito (e com sucesso) usando velocity apenas. :wink:

Só um detalhe :

Ele também tem que configurar xmls, mas eu estou escrevendo uma extensão para o XDoclet e templates Eclipse para suportar o Spring.