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
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:
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.
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 :))
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 …