Cheque aki! Exemplo de Velocity + Struts :)  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Elvis.The.Pelvis
JavaGuru
[Avatar]

Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline

Este pequeno exemplo mostra como é possível usar o Velocity junto com o Struts, usando inclusive a API de validação do Struts.
Você pode baixar o .war em:
http://www.recjug.com.br/velocitystruts.war
O fonte do projeto pode ser encontrado em:
http://www.recjug.com.br/velocitystruts.zip

Algumas considerações:
1 - Configurem o velocity.properties (%TOMCAT_HOME%webapps/velocitystruts/WEB-INF) para apontar para o diretório onde se encontra seus templates (%TOMCAT_HOME%webapps/velocitystruts/vtemplates).

2 - Configurem o basehref no application.properties para que as imagens e os links funcionem.

3 - No netscape, foi impresso o conteúdo do html sem ter sido interpretado, acho que tem algo a ver com o content type (no i.e. funciona filet).

4 - Essa aplicação sempre vai gerar erros de validação. Ela não chega a realmente cadastrar em banco os dados. Esse exemplo mostra como construir um servlet para interpretar seus *.vm e acessar a API de validation do struts.

Adorei implementar isso

****Edited****
(cantarolando)... Estou esperando meu prêmiooooooooo...
****Edited****

Se não fosse o C, até hoje estaríamos programando em BASI, PASAL e OBOL.
Elvis.The.Pelvis é Daniel Freitas
[Email] [WWW] [MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

muito legal!

estava indo fazer um projeto em JSP com struts porcausa da documentacao soh dar os exmeplos com JSP em 99% dos casos, mas vi que ta bem elgal de usar ja com velocity

o premio sao os meus parabens! olhe a homepage

nao quer escrever um tutorial pra gente nao?

ps: a conexao do recjug parece ser mto baixa
ps2: voce podia ter deixado os libs de fora do source! esse download aqui nao acaba!
ps3: seguem perguntas relativas ao codigo, ja q nao posso testar daqui do trampo

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

bem, pelo que vi no codigo, voce mesmo que esta fazendo a integracao velocity + strutrs. Tipo, parte do Controller voce que esta fazendo.

Tem um mini projeto dentro do Velocity, que teoricamente ja deve fazer isso. Quero ver qual eh a deles.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

http://cvs.apache.org/viewcvs/jakarta-velocity-tools/examples/struts/WEB-INF/
sua aplicacao ta bem parecida com o que o pessoal do velocity usa de exemplo neh?

assim como a VelocityServlet sua
http://cvs.apache.org/viewcvs/jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/servlet/VelocityViewServlet.java?rev=1.6&content-type=text/vnd.viewcvs-markup

eu nao gosto muito desse estilo de Controller, onde nao tem um FrontController, ja que a entrada pode vir por dois lados bem diferentes

que que voces acham?

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Elvis.The.Pelvis
JavaGuru
[Avatar]

Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline

Bem, não tive contato com o VelocityServlet do pessoal da Velocity (juro), veio da minha cabeça mesmo, por isso não sei se é a melhor forma de implementar.

Implementei o servlet por que é mais divertido mesmo. Fiquei divagando um tempo em como fazer para passar os atributos do request para o VelocityContext. Foi no que deu.

Mas se você parar para pensar, o VelocityServlet não é bem um Controller. Ele só renderiza output. Quem decide o fluxo da aplicação ainda é o ActionServlet, então...

Por exemplo, o ActionServlet pega a requisição "algo.do", faz alguma operação e repaça **PUTS - repassa seu burro** a requisição para "novocaminho.vm". O VelocityServlet captura através do servlet-mapping e processa o output. Ele faz o mesmo papel dos servlets gerados a partir das JSP. Você tem vários servlets mas apenas 1 controla o fluxo.

O VelocityServlet não tem poder de decisão.

***Edited***
A idéia de usar um servlet para interpretar os .vm realmente veio de lá. Mas pensando bem, existe alguma maneira melhor de se fazer???
***Edited***

Se não fosse o C, até hoje estaríamos programando em BASI, PASAL e OBOL.
Elvis.The.Pelvis é Daniel Freitas
[Email] [WWW] [MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

Elvis.The.Pelvis wrote:
Mas se você parar para pensar, o VelocityServlet não é bem um Controller. Ele só renderiza output. Quem decide o fluxo da aplicação ainda é o ActionServlet, então...


verdade. parece um viewhelper

Elvis.The.Pelvis wrote:
Por exemplo, o ActionServlet pega a requisição "algo.do", faz alguma operação e repaça **PUTS - repassa seu burro** a requisição para "novocaminho.vm". O VelocityServlet captura através do servlet-mapping e processa o output. Ele faz o mesmo papel dos servlets gerados a partir das JSP. Você tem vários servlets mas apenas 1 controla o fluxo.

O VelocityServlet não tem poder de decisão.


verdade, mas ta muito direito no pipeline da requisicao neh?

Elvis.The.Pelvis wrote:

***Edited***
A idéia de usar um servlet para interpretar os .vm realmente veio de lá. Mas pensando bem, existe alguma maneira melhor de se fazer???
***Edited***


Um negocio que seria legal, era ao inves de ter um VelocityServlet, era um ViewHelperServlet, e ai ele delegava para a VelocityServlet ou apra um JSP, dependendo do caso. Assim voce poderia usar JSP, Velocity ou qquer outra coisa sem ter de alterar nada.

Bem, melhor ideia eu nao tenho.
Queria criar um forum apra discussoes desse tipo. Tipo, um nivel bem alto de discussao, design e arquitetura.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

Elvis/Paulo...

nao sei o q fiz de errado, mas nao consegui rodar esse exemplo de struts + velocity....

configurei tudo q o Elvis disse no topico, mas mesmo assim nao executa...

o q pode ser??

falow

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
Elvis.The.Pelvis
JavaGuru
[Avatar]

Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline

O que é que ta dando de errado? Da uma olhada no output do tomcat. imprimo algumas coisas lá.

Se não fosse o C, até hoje estaríamos programando em BASI, PASAL e OBOL.
Elvis.The.Pelvis é Daniel Freitas
[Email] [WWW] [MSN]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

Elvis...

aparece esse erro no browser....no console do tomcat nao aparece nada de erro....

java.lang.NoSuchMethodError
at br.org.recjug.velocitystruts.servlet.VelocityServlet.service(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106)
at java.lang.Thread.run(Unknown Source)


o q pode ser??

valew

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Ta dizendo que o metodo que voce esta chamando nao existe

Isso geralmente acontece quando voce marca o contexto como reloadable e altera alguma coisa na estrutura da classe ou na assinatura do metodo.. Nesses casos, voce precisa restarta o tomcat ( de um rebuild geral no projeto e reinicie ele).. deve funcionar..

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

Rafael.

nem mexi em nada na estrutura de classes do exemplo...apenas baixei e rodei....

como dar rebuild no projeto?? tentei jogar no eclipse, mas nao deu mto certo....

falow

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
Elvis.The.Pelvis
JavaGuru
[Avatar]

Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline

O arquivo .zip contém o fonte do projeto. Edita o build.xml, configurando os parâmetros iniciais para as suas pastas no seu disco. Rode o ant. Deve ser gerado um .war na sua pasta webapps do tomcat. daí é so rodar o Tomcat. Agora to viajando em pq tá dando erro. Deveria rodar legal. Testei em várias máquians aki no trampo e rolou legal.

Rafael, esse problema que você falou é do velocity ou do Tomcat???

Se não fosse o C, até hoje estaríamos programando em BASI, PASAL e OBOL.
Elvis.The.Pelvis é Daniel Freitas
[Email] [WWW] [MSN]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

caro Elvis...

nao encontrei o build.xml do exemplo....

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
Elvis.The.Pelvis
JavaGuru
[Avatar]

Membro desde: 18/12/2002 17:45:34
Mensagens: 220
Localização: Recife/PE
Offline

tem certeza que não está no zip. mandei dois arquivos. um .war e um .zip

Se não fosse o C, até hoje estaríamos programando em BASI, PASAL e OBOL.
Elvis.The.Pelvis é Daniel Freitas
[Email] [WWW] [MSN]
Guilherme Silveira
Administrador

Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline

confere a versao de servlet api e jdk utilizado, o metodo que nao esta sendo encontrado pode soh existir em uma versao mais recente (q foi usada pra programar)...

-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team