Gostaria de saber se possivel aplicar um hierarquia de pasta no VRaptor, por exemplo, por padrão o nome da pasta que é criada dentro do JSP é o mesmo nome para o controle PastaController, exemplo, pasta index o controller tem que ser IndexController, bom eu gostaria de montar um nova estrutura de pasta no meu projeto quer seria o seguinte :
/admin/usuario (Criar um pasta admin e dentro dela uma pasta usuario);
para acessar o index de /admin/index, eu deveria criar um AdminController com o metodo index(), e anota-lo com @GET("/admin/"), sei que consigo acessar o jsp numa boa, mas desejo criar um controller para usuario e acessar a pasta dentro de admin, teria como que criar um metodo no UsuarioController (pos exemplo, form()) e acessar dentro da pasta /admin/usuario/form, ou teria que criar o metodo form() para manipular o meu usuario no AdminController?
então teria que criar por exemplo em AdminController() um metodo usuario usando @Get(/usuario/form) na sua anotação, e dentro deste metodo criar um result.forwardTo("/WEB-INF/templates/suaPasta/suaSubPasta/seutemplate.jsp") ?
se vc quer fazer isso em um lugar só, esse forward é ok… se vc quiser fazer isso em vários lugares, é melhor sobrescrever a convenção do VRaptor: o PathResolver:
ele tem métodos que te deixam extrair o nome do controller… assim ao invés de retornar “usuarios”, vc pode colocar “/admin/usuarios” se o controller estiver no pacote admin (ou algo do tipo)
Bom o que eu desejo criar duas forma de acesso uma sendo /public e outra /admin, onde a formar /public o usuario navegue sem uso de login e a outra seria a /admin onde criaria uma outra pasta dentro da pasta admin (por exemplo, /user, por questão de organização) … e setar o login e senha para /admin e tambem facilitar a organizar do themplate pelo sistemesh
Estou tentando fazer isso aqui
Na class do AdminController
@Resource
public class AdminController {
private Result result;
public AdminController(Result result) {
this.result = result;
}
@Get("/admin/")
public void index(){}
@Get("/admin/usuario/form")
public void usuario(){
result.forwardTo(UsuarioController.class).form();
}
Na minha class UsuarioControlle()
package br.com.agenciaweb.controller;
import br.com.agenciaweb.modelo.Usuario;
import br.com.agenciaweb.repository.UsuarioRepository;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
@Resource
public class UsuarioController {
private Result result;
private UsuarioRepository repository;
public UsuarioController(Result result, UsuarioRepository repository) {
this.result = result;
this.repository = repository;
}
@Get("/usuario/form")
public void form(){}
@Post("/usuario")
public void salvar(Usuario usuario){
usuario = this.repository.save(usuario);
this.result.include("message", "Cadastro realizado com sucesso ....").redirectTo(this).listar();
}
@Get("/usuario/listar")
public void listar(){
result.include("message","listar usuario");
}
}
de arcodo mmaico usando result.forwardTo resolveria, mais apanhei para saber que tinha que deixar na mesma estrutura hierarquia da pasta /admin, ou seja, as pasta teria que ficar:
/jsp
/admin
/usuario
para o metodo da minha funciona-se, por favor se estiver errado me corrijam, pois a forma que tentando aki,
vou analisar esta outra aki tambem e tentar fazer, mais teria com ajudar na questão de dividir as forma de acesso, a minha duvida esta nesse processo
o controle de acesso não precisa ser necessariamente pela URL, vc pode fazer isso do lado dos controllers (ex criando uma anotação pra definir o que precisa de login)
se vc faz:
result.forwardTo(UsuarioController.class).form();
não importa aonde esteja ele vai por padrão pra: /WEB-INF/jsp/usuario/form.jsp, a menos que o método form mude isso ( ou que vc sobrescreva o PathResolver)
entendi, mais sobre o sistema de login, vc falar sobre os interceptadores, se anotar na meus controller que serão bloqueadas por exemplo AdminController, UsuarioController a anotação @Permission(TipoPerfil.ADMINISTRADOR), ira bloquer o acesso?