Boa noite,
Alterei a convenção do VRaptor para utilizar minha hierarquia de pacotes (removendo a necessidade de anotar com @Path), mas percebi ao acaso que estou tendo problemas quando o path do Controller começa a crescer. O VRaptor simplesmente não sabe para onde direcionar e, mesmo que ele mostre no log o path encontrado correto, mesmo assim a página fica em branco.
A alteração da convenção foi a seguinte:
@Component
public class PackagePathResolver implements PathResolver {
@Override
public String pathFor(ResourceMethod method) {
final Class<?> clazz = method.getResource().getType();
final String clazzName = clazz.getSimpleName();
final Package pkg = clazz.getPackage();
final StringBuilder s = new StringBuilder();
s.append("/WEB-INF/jsp/");
String lastPackage = StringUtils.substringAfter(pkg.getName(), "controller.").replaceAll("\\.", "/");
s.append(lastPackage);
if (!StringHelper.isEmpty(lastPackage)) {
s.append("/");
}
s.append(StringUtils.substringBefore(clazzName, "Controller").toLowerCase());
s.append("/");
s.append(method.getMethod().getName().toLowerCase());
s.append(".jsp");
return s.toString();
}
@Component
@ApplicationScoped
public class PackageRoutesParser extends PathAnnotationRoutesParser {
//delegate constructor
public PackageRoutesParser(Router router) {
super(router);
}
@Override
protected String extractControllerNameFrom(Class<?> type) {
return extractPackage(type) + super.extractControllerNameFrom(type);
}
private String extractPackage(Class<?> type) {
String[] subpackages = type.getPackage().getName().split("\\.");
String path = "";
boolean appendPackageName = false;
for (String s : subpackages) {
if (appendPackageName) {
path += "/" + s;
}
if ("controller".equals(s)) {
appendPackageName = true;
}
}
return path;
}
}
Com log habilitado, tenho os seguintes outputs:
...
INFO b.c.c.v.h.route.DefaultRouteBuilder - /recepcaodocumentos/recebimentoDocumento/inicio [ALL] -> RecebimentoDocumentoController.inicio()
DEBUG b.c.c.vraptor.view.DefaultPageResult - forwarding to /WEB-INF/jsp/recepcaodocumentos/recebimentodocumento/inicio.jsp
Tenho uma JSP EXATAMENTE nesse path que foi mostrado no log e mesmo assim ao tentar acessar a URL informada, a página simplesmente fica em branco e aparece o seguinte log:
19:40:02.268 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor received a new request
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ResourceLookupInterceptor
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - trying to access /recepcaodocumentos/recebimentoDocumento/inicio
19:40:02.270 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - found resource [DefaultResourceMethod: RecebimentoDocumentoController.inicio()]
19:40:02.271 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor InstantiateInterceptor
19:40:02.275 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExceptionHandlerInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor FlashInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExecuteMethodInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ExecuteMethodInterceptor - Invoking RecebimentoDocumentoController.inicio()
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ForwardToDefaultViewInterceptor
19:40:02.276 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ForwardToDefaultViewInterceptor - forwarding to the dafault page for this logic
19:40:02.278 [http-bio-8080-exec-5] DEBUG b.c.c.vraptor.view.DefaultPageResult - forwarding to /WEB-INF/jsp/recepcaodocumentos/recebimentodocumento/inicio.jsp
19:40:02.279 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor received a new request
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ResourceLookupInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - trying to access /recepcaodocumentos/recebimentoDocumento/inicio
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.h.DefaultResourceTranslator - found resource [DefaultResourceMethod: RecebimentoDocumentoController.inicio()]
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor InstantiateInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExceptionHandlerInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor FlashInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ExecuteMethodInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ExecuteMethodInterceptor - Invoking RecebimentoDocumentoController.inicio()
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.c.ToInstantiateInterceptorHandler - Invoking interceptor ForwardToDefaultViewInterceptor
19:40:02.280 [http-bio-8080-exec-5] DEBUG b.c.c.v.i.ForwardToDefaultViewInterceptor - Request already dispatched and commited somewhere else, not forwarding.
19:40:02.280 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor ended the request
19:40:02.280 [http-bio-8080-exec-5] DEBUG br.com.caelum.vraptor.VRaptor - VRaptor ended the request
Alguém poderia me dar uma luz? Estou sem idéias do que fazer…
Obrigado.