| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 16:50:08
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 17:14:13
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 17:20:43
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 17:42:05
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 18:17:46
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 19:01:11
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/03/2003 10:00:01
|
rbarioni
GUJ Master
![[Avatar]](/images/avatar/c8ad096d3f3b756be66f6.gif)
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/03/2003 15:53:32
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 09:05:59
|
rbarioni
GUJ Master
![[Avatar]](/images/avatar/c8ad096d3f3b756be66f6.gif)
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 11:59:16
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 14:20:53
|
rbarioni
GUJ Master
![[Avatar]](/images/avatar/c8ad096d3f3b756be66f6.gif)
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 17:01:21
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 17:25:43
|
rbarioni
GUJ Master
![[Avatar]](/images/avatar/c8ad096d3f3b756be66f6.gif)
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2003 20:54:01
|
Elvis.The.Pelvis
JavaGuru
![[Avatar]](/images/avatar/c8a589523f35508a5d7ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2003 11:05:41
|
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
 |
|
|
 |
|
|