Opiniões: Mentawai agora suporta Velocity!

13 respostas
saoj

Através de algumas mágicas, o Mentawai suporta três alternativas para o uso indolor do Velocity:

:arrow: Velocity puro

:arrow: Velocity com suporte a jsp taglibs, incluindo a taglib do Mentawai

:arrow: JSP com velocity

O que vcs acham desse approach ???

Mais info em: http://mentawai.lohis.com.br/velocity.jsp

13 Respostas

Rubem_Azenha

Fenomenal!
Muito boa a sua idéia!
Conseguiu contornar a falta de taglibs do Velocity!

A taglib mtw:velocity é uma idéia interessante!

urubatan

esta sua ideia é um problema grave …
impede a utilização junto com uma Web APP 1.4, pois vai dar confusão entre as expressões do Velocity e as expressões EL dentro da JSP.

acho que melhro do que isto é a abordagem do WebWork, da uma olhadinha no código deles, é bem fácil de implementar, eu cheguei a copiar a ideia deles quando estava desenvolvendo as velotags :smiley:

se precisar de ajuda da um grito que pouca coisa assim até tenho tempo pra fazer :smiley:

saoj

urubatan:
esta sua ideia é um problema grave …
impede a utilização junto com uma Web APP 1.4, pois vai dar confusão entre as expressões do Velocity e as expressões EL dentro da JSP.

Velocity aceita ${username} e $username.

EL só aceita ${username}

Se vc misturar as coisas a esse ponto, realmente vc terá problemas graves. Veja a última frase do tutorial:

Para as tags que podem aceitar EL, vc deve usar EL e nunca velocity. Seria loucura misturar isso, concorda?. Lembre-se tb que primeiro o JSP é processado e depois o velocity. Dá para usar com 1.4 sim! Isso foi testado com 1.4. :wink:

Cara, a abordagem do WebWork é complicada de reproduzir. O WW cria através da API do velocity uma nova diretiva para simular como o container de servlet executa uma tag de jsp. Isso mesmo, ele carrega a tag, executa doStartTag, doAfterBody(), doEndTag, etc e tal. Ou seja, os caras reescreveram o tomcat.

O efeito final é legal tb, pois te permite executar tags de JSP através de diretavas do velocity, ou seja, isso seria realmente código 100% velocity puro com chamadas as tags de jsp.

Cara, dá uma olhada no código da AbstractTagDirective.java do velocity e veja que aquilo não é simples não. Muito pelo contrário…

Acho que a abordagem atual do Mentawai em relação ao velocity resolve a grande maioria das necessidades de quem não consegue viver sem velocity, mesmo com JSTL e EL fazendo praticamente a mesma coisa.

Agora se tu quiser implementar um AbstractTagDirective para o Mentawai, seria ótimo. :stuck_out_tongue:

urubatan

tem situações no velocity onde é obrigatorio utilizar ${valor.propriedade} ai vai dar conflito com a EL.

por exemplo, se tu quiser imprimir: ${valor.propriedade}.qualquer outra coisa

tem que utilizar ${} se não da pau mesmo …

vou ver se arrumo tempo esta semana e porto a implementação do WW pro mentawai e te passo os fontes para ti avaliar :smiley:

saoj

urubatan:
tem situações no velocity onde é obrigatorio utilizar ${valor.propriedade} ai vai dar conflito com a EL.

por exemplo, se tu quiser imprimir: ${valor.propriedade}.qualquer outra coisa

tem que utilizar ${} se não da pau mesmo …

Fala Urubatan !!!

Dei uma olhada na documentação do velocity e lá ele fala que só é necessário usar a notação ${} quando vc estiver fazendo concatenação de strings.

Ex:

#set( $size = "Big" )
#set( $name = "Ben" )

Concatenando: ${size}Tall$name ## $sizeTall$name não funciona...

Então como regra para resolver conflitos:

:arrow: Se é velocity use $user.name.firstName e nunca ${user.name.firstName}

:arrow: Se é EL use ${user.name.firstName}, pois só dá para usar isso mesmo. (EL não aceita $user.name.firstName)

:arrow: Se é velocity e é concatenação de strings, que é o tal caso que vc é obrigado a usar ${}, então use o tag <mtw:velocity> para indicar que estamos falando de velocity e não de EL. Ex: <mtw:velocity> ${size}Tall$name</mtw:velocity>

O ideal é que quando vc precise fazer concatenação vc opte por EL para não complicar as coisas. Ex: ${size}Tall${name}.

Note que como primeiro o JSP é processado por inteiro e depois o Velocity é processado, mesmo que vc deixe ${size}Tall$name sem o tag <mtw:velocity> no final das contas tudo funciona.

Primeiro o JSP vai transformar em BigTall$name e depois o velocity em BigTallBan.

Ou seja, é bem difícil vc conseguir fazer uma cagada misturando JSP com Velocity. Se vc quiser realmente criar um problema, acho que a situação abaixo vai dar pau:

#set( $size = "Big" )

Concatena: ${size}Tall$name

Isso vai dar pau pois o JSP não sabe nada a respeito do set do velocity, daí ou o JSP vai colocar o valor que ele tem de size ou vai apagar o ${size}.

Para solucionar o único jeito então seria:

&lt;mtw:velocity&gt;
#set( $size = "Big" )

Concatena: ${size}Tall$name
&lt;/mtw:velocity&gt;
F

Uma pequena duvida.

Qual o ganho real de fazer essa salada, usando Velocity, El e Tags JSP tudo junto?

Tem alguma parte da historinha que eu perdi? :mrgreen:

]['s

saoj

Nenhum ganho. Vc deve escolher entre uma coisa ou outra.

A possibilidade de usar JSP de dentro do Velocity só será util quando vc necessitar ou quiser chamar taglibs de dentro do Velocity.

“Sergio”:

[color=red]Whatever approach you choose, just be careful not to produce a real mess with a crazy mixture of velocity and jsp. :wink: [/color]

F

saoj:
Nenhum ganho. Vc deve escolher entre uma coisa ou outra.

A possibilidade de usar JSP de dentro do Velocity só será util quando vc necessitar ou quiser chamar taglibs de dentro do Velocity.

Certo Sergio, mas se nao tem um real ganho pq perder tempo fazendo essa implementacao? Nao seria mais vantagem focar em algo que realmente faca a diferenca?

Nao estou criticando o trabalho, longe disso, só queria entender o que levou a fazer esse “juncao”. Pra fazer isso nao seria mais vantagem integrar o Mentawai com o Freemarker que ja vem com suporte a tag libs e el se nao me engano?

]['s

saoj

Acho que vc não entendeu o ponto da questão:

Suporte a Velocity é importante pois tem muita gente como tu que prefere velocity a JSTL + EL.

Só que quando vc usa Velocity vc perde as taglibs do framework, isto é, todas aquelas mágicas e facilidades das tags do mentawai são perdidas.

Então para resolver esse problema de maneira simples e sem causar qualquer tipo de perda para o usuário, vem essa solução de fazer o template do velocity suportar chamadas a tags de JSP.

Apenas isso! E note que isso é opcional, ou seja, vc não precisa fazer o Velocity suportar EL se vc não quiser. Há uma flexibilidade boa aqui. Vc poderia por exemplo suportar taglibs mas não suportar EL através da diretiva:

&lt;%@ page isELIgnored="true" %&gt;

O que vc não deve fazer NUNCA é aproveitar essa integração JSP/Velocity para criar uma zona. :wink:

Por mim eu ignorava o Velocity, pois com EL dá pra fazer praticamente a mesma coisa. Só que tem gente que faz questão de Velocity e não quero perder essa galera, me entende?

F

Ta ai o pedaco da historinha que perdi.

Entendi o teu pensamento. Eu perguntei dessa integracao pq eu sou um dos que usa Velocity, mas nunca pensei ou precisei integrar com tags jsp. Derrepente pq nao tinha essa opcao.

Vlw pela explicacao Sergio.

]['s

P

saoj:
Acho que vc não entendeu o ponto da questão:

Suporte a Velocity é importante pois tem muita gente como tu que prefere velocity a JSTL + EL.

Só que quando vc usa Velocity vc perde as taglibs do framework, isto é, todas aquelas mágicas e facilidades das tags do mentawai são perdidas.

Só curiosidade…

Chegou a pensar em seguir o mesmo caminho da turma do velocity-tools ?
Algo contra implementar “tools” com funcionalidades semelhantes às tags ?

saoj

Acho que não dá pois os tools não possuem acesso ao request.

P

saoj:
“psevestre”:

Algo contra implementar “tools” com funcionalidades semelhantes às tags ?

Acho que não dá pois os tools não possuem acesso ao request.

Dê uma olhada na implementação dos Tools p/ struts. No caso eles fizeram um servlet específico para views Velocity e utilizam o método init() do tool para passar o contexto da view, que inclui o request, response, etc.

Criado 10 de julho de 2005
Ultima resposta 12 de jul. de 2005
Respostas 13
Participantes 5