Olá pessoal estou tnetando integrar o vraptor3 com tiles seguindo os passos do “vraptor3cookbook” mas não estou consegundo.
A aplicação sempre me retorna um erro 404 quando acesso a url http://localhost:8080/vraptor-teste/candidato/mostraPesquisa,
bom… não sei o que estou fazendo de errado, se alguem puder me ajudar agradeço muito.
[code]@Component
public class TilesPathResolver implements PathResolver {
private static final String VIEW_SUFIX = “.tiles”;
private static final String CLASS_SUFIX = “Controller”;
@Override
public String pathFor(ResourceMethod method) {
final Class<?> clazz = method.getResource().getType();
String pkgname = clazz.getPackage().getName();
final StringBuilder s = new StringBuilder();
s.append("/");
// retorna apenas o nome do último pacote
s.append(pkgname.substring(pkgname.lastIndexOf(".") + 1));
s.append(".");
//remove o sufixo controller
s.append(clazz.getSimpleName().substring(0, clazz.getSimpleName().indexOf(CLASS_SUFIX)));
s.append(".");
s.append(method.getMethod().getName());
s.append(VIEW_SUFIX);
// definições do tile em minusculo, mas você pode alterar isso
return s.toString().toLowerCase();
}
}
[/code]
controller:
@Resource
public class candidatoController {
public void mostraPesquisa(){
}
}
Apenas isso? Ou seu tiles não está inicializado ou então essa definition não existe. Embora se fosse definition não contrada teria uma DefinitionNotFoundException.
Você consegue ver nos logs se o tiles está sendo inicializado?
17:28:34,708 DEBUG [DefaultResourceTranslator] trying to access /candidato/mostraPesquisa
17:28:34,708 DEBUG [DefaultResourceTranslator] found resource {DefaultResourceMethod: br.ceuma.teste.candidatoController.mostraPesquisa}
17:28:34,723 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.ceuma.teste.candidatoController.mostraPesquisa() as []
17:28:34,723 DEBUG [ParametersInstantiatorInterceptor] Parameter values for {DefaultResourceMethod: br.ceuma.teste.candidatoController.mostraPesquisa} are []
17:28:40,222 DEBUG [DefaultResourceTranslator] trying to access /teste.candidato.mostrapesquisa.tiles
cordjr, desculpe ter perdido esse tópico de vista.
Altere seu TilesPathResolver e adicione uma linha aí de log para entendermos o que pode estar acontecendo.
Após a linha “s.append(VIEW_SUFIX);” adicione isso abaixo. Assim podemos entender para onde está sendo feito o redirect.
O servlet do tiles está antes ou depois da definição do vraptor?
Lucas, você que conhece melhor, como o vraptor faz o deferer pro container? Será que pode ser o vraptor tentando pegar essa URL para ele e evitando que ele seja passado pelo tiles?
Olá garcia-jj, adicionei um logger na lclasse e fiz como você sugeriu, o log ficou assim
[quote]15:57:44,795 DEBUG [DefaultResourceTranslator] trying to access /candidato/mostraPesquisa
15:57:50,014 DEBUG [DefaultResourceTranslator] found resource {DefaultResourceMethod: br.ceuma.teste.candidatoController.mostraPesquisa}
15:57:50,686 DEBUG [AsmBasedTypeCreator ] Trying to make class for candidatoController$mostraPesquisa$1277959566$1
15:57:50,702 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.ceuma.teste.candidatoController.mostraPesquisa() as []
15:57:50,702 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating type are: []
15:57:50,702 DEBUG [AsmBasedTypeCreator ] Methods: []
15:57:50,702 DEBUG [AsmBasedTypeCreator ] Fields: []
15:57:50,702 DEBUG [CacheBasedTypeCreator] cached generic type for method {DefaultResourceMethod: br.ceuma.teste.candidatoController.mostraPesquisa}
15:57:50,733 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.ceuma.teste.candidatoController.mostraPesquisa() as []
15:57:50,733 DEBUG [ParametersInstantiatorInterceptor] Parameter values for {DefaultResourceMethod: br.ceuma.teste.candidatoController.mostraPesquisa} are []
15:57:52,342 DEBUG [TilesPathResolver ] resultado final de TilesPathResolver : é : teste.candidato.mostraPesquisa.tiles <----
15:57:52,421 DEBUG [DefaultResourceTranslator] trying to access /candidato/teste.candidato.mostrapesquisa.tiles
[/quote]
O servlet do tiles está declarado antes do filter do vraptor.