Subpastas no Vraptor

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 :wink: