Pessoal, gostaria de saber como que fica o controller do vraptor quando criamos subpastas WEB-INF/jsp. Por exemplo:
WEB-INF -> jsp -> cadastro -> motorista -> index.jsp
[code]@Resource
public class MotoristaController {
private final Result result;
public MotoristaController(Result result) {
this.result = result;
}
@Path("/")
public void index() {
result.include("variable", "VRaptor!");
}
}[/code]
Isso aí em cima está correto? Porque esta dando o seguinte erro: Perceba que a pasta ‘cadastro’ nao está na URL.
O padrão do vraptor é usar WEB-INF/jsp/NOME_DO_CONTROLLER/METODO.jsp. Isso que você quer não tem como fazer a menos que você sobrescreva o comportamento padrão do vraptor.
Crie uma classe como o exemplo abaixo. Nesse caso eu uso JSPX e também uso o diretório conforme o package da classe. Note que o forward para JSP será baseado em WEB-INF/jspx/PACKAGE_NAME/NOME_DO_CONTROLLER/METODO.jspx. Você deve alterar de JSPX para JSP e também adaptar conforme seu projeto.
Basta largar isso em qualquer lugar das suas classes que o vraptor já faz o scan da classe.
[code]@Component
public class JspxPathResolver
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/jspx/");
s.append(StringUtils.substringAfterLast(pkg.getName(), "."));
s.append("/");
s.append(StringUtils.substringBefore(clazzName, "Controller").toLowerCase());
s.append(".");
s.append(method.getMethod().getName().toLowerCase());
s.append(".jspx");
return s.toString();
}
}[/code]
é o que garcia falou, só não precisa ser jspx