Mentawai Web Framework

Suporte a Velocity

Para usar Velocity com o Mentawai antes de mais nada você deve colocar o jar do velocity dentro da pasta /WEB-INF/lib de sua aplicação. Você pode utilizar o arquivo velocity-dep-1.4.jar que vem junto com o Mentawai dentro da pasta /lib.

Feito isso, tudo que você precisa fazer é instalar o org.mentawai.velocity.VelocityServletFilter em sua aplicação web. Note que esse é um filtro de servlets, e não do Mentawai. Um filtro da API de servlets pode interceptar e alterar o conteúdo da página antes de ela ser enviada para o navegador.

Para instalar o VelocityServletFilter em sua aplicação web, inclua essas linhas no seu arquivo web.xml:

<!-- Define the velocity filter -->
<filter>
    <filter-name>VelocityFilter</filter-name>
    <filter-class>
        org.mentawai.velocity.VelocityServletFilter
    </filter-class>
</filter>

<!-- Map the filter to a file extension -->
<filter-mapping>
    <filter-name>VelocityFilter</filter-name>
    <url-pattern>*.vm</url-pattern>
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher>    
    <dispatcher>INCLUDE</dispatcher>    
    <dispatcher>ERROR</dispatcher>    
</filter-mapping>
    

No código acima, estamos indicando que nosso filtro deve ser aplicado a todos os arquivos com extensão .vm. Note que você também pode espeficicar em quais situações o filtro deve ser aplicado, usanda a tag <dispatcher>.

  • REQUEST: Quando o arquivo é acessado diretamente pelo navegador. (Ex:Consequência Redirect)
  • FORWARD: Quando o arquivo é acessado atravez de um forward de um servlet. (Ex: Consequência Forward)
  • INCLUDE: Quando o arquivo é acessado através de um include do jsp (Ex: <jsp:include>)
  • ERROR: Quando o arquivo é um página de erro. (Ex: <%@ page isErrorPage="true" %>)
E é isso aí! Você já pode começar a usar Velocity junto com o Mentawai!


E quanto as tags do Mentawai?

Boa pergunta! Como você pode usar todas aquelas tags do Mentawai para internacionalização, autenticação, forms html, etc. com Velocity? Não se desespere! Com o Mentawai você pode chamar qualquer taglib jsp de dentro do seu template Velocity! Inclua as linhas abaixo em seu arquivo web.xml para fazer com que seu template Velocity também possa se comportar como uma página jsp:

<servlet>
    <servlet-name>tags-for-vm</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <load-on-startup>3</load-on-startup>  
</servlet>

<servlet-mapping>
    <servlet-name>tags-for-vm</servlet-name>
    <url-pattern>*.vm</url-pattern>    
</servlet-mapping>
    

Tente usar o template abaixo e veja por você mesmo que isso funciona:

<%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %>
<!-- example of a hello.vm file -->
<html>
<body>
<!-- mentawai tag -->
<h3>Hello <mtw:out value="username" /> from Mentawai!</h3>
<!-- now velocity -->
<h3>Hello $username with Velocity!</h3>
<!-- do something crazy with velocity -->
#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )
    <h1>$criterion</h1>
#end
</body>
</html>
    

Apenas tome cuidado pois o jsp é processdo antes do template Velocity.


Apenas um pouquinho de Velocity dentro do seu JSP

Ok! Se você não quer usar a abordagem do Velocity, que é usando apenas templates com arquivos *.vm você ainda pode usar Velocity dentro de suas páginas JSP atrávez da tag <mtw:velocity>.

Dê uma olhada no exemplo abaixo:

<!-- example of a hello.jsp file -->
<%@ taglib uri="/WEB-INF/lib/mentawai.jar" prefix="mtw" %>
<html>
<body>
<!-- mentawai tag -->
<h3>Hello <mtw:out value="username" /> from Mentawai!</h3>
<!-- now velocity -->
<mtw:velocity>
<h3>Hello $username with Velocity!</h3>
<!-- do something crazy with velocity -->
#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )
    <h1>$criterion</h1>
#end
</mtw:velocity>
</body>
</html>
    

Qualquer que seja a abordagem que você escolha, tome cuidade para não fazer uma macarronada com a mistura de velocity e jsp. ;-)