Vraptor + velocity

7 respostas
kripton11235

Bom dia pessoal, estou tendo problemas em utilizar o vraptor + velocity. Acessando diretamente na url o arquivo olamundo.vm funciona sem problemas, mas criando um controlador e tentando acessar o mesmo arquivo por ele, não funciona.
meu arquivo web.xml está assim:

<servlet>
	<servlet-name>velocity</servlet-name>
	<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
	
<servlet-mapping>
	<servlet-name>velocity</servlet-name>
	<url-pattern>*.vm</url-pattern>
</servlet-mapping>

Meu controlador está assim:

package br.com.caelum.goodbuy.controller;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;

public class TesteController {
	private Result result;

	public TesteController(Result result) {
		this.result = result;
	}

	@Path("/teste")
	public void teste() {
		result.include("mensagem", "Estou usando o Velocity");
		result.forwardTo("/olamundo.vm");
	}
}
[code]

Acessando http://localhost:8080/goodbuy/olamundo.vm - acesso o conteúdo do arquivo.
Acessando http://localhost:8080/goodbuy/teste - Exibe o erro 404.

Há algum erro que eu esteja cometendo?

7 Respostas

Lucas_Cavalcanti

ele fala qual é o caminho do arquivo que ele procurou no 404?

de qualquer forma, se todas as suas views forem do Velocity, vc pode criar um componente parecido com esse:

@Component
public class VelocityPathResolver extends DefaultPathResolver {
   
    @Override
    protected String getPrefix() {
        return "/WEB-INF/velocity/";
    }
   
    @Override
    protected String getExtension() {
        return "vm"; 
    }
}

daí é só usar a convenção do vraptor, substituindo o jsp por vm, e colocando os arquivos na pasta WEB-INF/velocity

kripton11235

Boa tarde Lucas, eu estou seguindo o material da apostila fj28 da Caelum, não queria utilizar o velocity em todo o meu projeto, mas apenas nesse arquivo específico a título de curiosidade. O caminho mencionado na página de erro é goodbuy/teste.

Lucas_Cavalcanti

algum outro controller/lógica está funcionando?

kripton11235

Bem, os controladores que usam arquivos jsp estão funcionando. Meu arquivo olamundo.vm está salvo na web-inf.

Lucas_Cavalcanti

então faça:

result.forwardTo("/WEB-INF/olamundo.vm");
kripton11235

Vou tentar e posto se funcionou Lucas, obrigado.

jehffersson

Você esqueceu de colocar a anotação @Resource na classe TesteController.

Criado 22 de abril de 2010
Ultima resposta 11 de fev. de 2011
Respostas 7
Participantes 3