Velocity: "Unable to find resource"

Já procurei por tudo, mas ainda não encontrei algo prático e simples que conseguisse resolver esse problema. Sei que deve ser uma solução simples… é que eu estou iniciando no Velocity agora.

Encontrei algumas soluções sim… mas só diziam que era pra configurar o diretório onde ficarão os templates no arquivo velocity.properties mas faltou uma que desse a linha de código que seta essa propiedade dentro do tal velocity.properties. Só pra saber como fica a referência do diretório… se é relativa e talz…

A minha classe ExemploVelocity extende a VelocityServlet e estou querendo utilizar os meus “.vm” dentro da WEB-INF/templates

Agradeço a atenção,

Estava estudando o Velocity e encontrei e em um de seus exemplos, este esquema para setar o path em runtime, a saber, o exemplo é forumdemo:

Na classe
ControllerServlet

public class ControllerServlet extends VelocityServlet
{
    private static String ERR_MSG_TAG = "forumdemo_current_error_msg";

    
    /**
     *  lets override the loadConfiguration() so we can do some 
     *  fancier setup of the template path
     */
    
    protected Properties loadConfiguration(ServletConfig config )
        throws IOException, FileNotFoundException
    {
        String propsFile = config.getInitParameter(INIT_PROPS_KEY);
        
        /*
         *  now convert to an absolute path relative to the webapp root
         *  This will work in a decently implemented servlet 2.2 
         *  container like Tomcat.
         */

        if ( propsFile != null )
        {
            String realPath = getServletContext().getRealPath(propsFile);
        
            if ( realPath != null )
            {
                propsFile = realPath;
            }
        }
        
       Properties p = new Properties(); 
       p.load( new FileInputStream(propsFile) );
      

       /*
        *  now, lets get the two elements we care about, the 
        *  template path and the log, and fix those from relative
        *  to the webapp root, to absolute on the filesystem, which is
        *  what velocity needs
        */

       String path = p.getProperty("file.resource.loader.path");

       if (path != null)
       {
           path = getServletContext().getRealPath( path );
           p.setProperty( "file.resource.loader.path", path );
       }
        
       path = p.getProperty("runtime.log");

       if (path != null)
       {
           path = getServletContext().getRealPath( path );
           p.setProperty("runtime.log", path );
       }

       return p;
    }
   


///resto da classe

Cara,
Tava como mesmo problema que vc, acho que todo mundo passa por isso.
O template so foi achado quando eu coloquei o seguinte caminho no velocity.properties:

file.resource.loader.path = C:/Tomcat4.1/webapps/velocity/WEB-INF/templates

informando todo caminho ate os templates.
Ve se te ajuda.

[]'s

Então … mas deixar o path absoluto hardcode é mals … não acha?

No código que postei vc carrega e seta as properties quando o servlet é iniciado. Ai vc pode movê-lo entre contaneirs sem ter que mexer no arquivo de configuração.

sei lá… vai do gosto!

valeu

Consegui resolver usando a primeira sugestão… peguei lah o tal forumdemo que vem junto do Velocity e copiei os métodos do ControlServlet e o arquivo velocity.properties e utilizei no meu aplicativo

Ufa! Funcionou!!!

Pesquisei por tudo… lá no google aparece um monte… um monte de aplicações com esse problema :))

Valew aê galera!!!

cara, so meu velocity.properties está assim:

file.resource.loader.path = .

funciona normal.

Mas é meio estranho. Não consigo setar várias outras coisas nesse arquivo que não adianta nada. Por exemplo o velocityCount = 0 ou arrumar o arquivo de macros globais …