é aproveitar a semântica de cada método HTTP. ! Logo, muitas vezes precisamos usar métodos como GET, POST, PUT e etc. No VRaptor temos as anotações @Get, @Post, @Delete, etc que também permite configurar uma URI diferente da padrão.
as exceções não tratadas em sua aplicação. ! @Controller public class ClientesController { @Post("/cliente/save") public void save (Cliente cliente) { //Lógica para salvar o cliente result.on(MinhaException.class). forwardTo(this).list(); } }
específico. Mas, seguem regras diferentes por padrão. Um controller pertence ao escopo de requisição. Logo, a cada nova requisição (request) ele será instanciado novamente. Já um componente do VRaptor, por padrão, é construído sempre que necessário.
aplicação. ! @SessionScoped - O componente é o mesmo durante uma http session. ! @ConversationScoped - A instância do componente é mantida durante conversation. ! @RequestScoped - O componente é o mesmo durante uma requisição. ! @Dependent - O componente é instanciado sempre que requisitado.
do Java EE 7 que permite validar nosso modelo baseado em anotações. Com isso podemos usar anotações já existentes ou criar nossas próprias anotações. @Entity public class Cliente { ! @NotNull private String nome; @Past private Date nascimento; //Getters and Setters } ! }
interceptamos todas as requisições e simplesmente mostra na saída do console o que está sendo invocado. @Intercepts @RequestScoped public class Log { @Inject private final HttpServletRequest request; @AroundCall public void intercept(SimpleInterceptorStack s){ System.out.println("Interceptando"+request. getRequestURI()); s.next(); } ! }
controller, podemos usar as anotações @BeforeCall e @AfterCall. @Intercepts @RequestScoped public class Log { @BeforeCall public void before() { //código a ser executado antes da lógica } @AroundCall public void after(){ //código a ser executado depois da lógica } }
método include. @Controller public class ClientesController { ! @Inject private Result result; ! public void busca(int id) { result.include("msg", "Mensagem"); result.include("cliente", new Cliente(id)); } }
você pode usar o objeto Result. @Controller public class ClientesController { ! @Inject private Result result; ! public void list() {} ! public void save(Cliente cliente) { result.use(Results.logic()). redirectTo(ClientesController.class).list(); } }
sistema ! Results.page() - Vai redirecionar diretamente para uma página, podendo ser um JSP, um HTML, ou qualquer URI relativa ao web application dir, ou ao contexto da aplicação. ! Results.http() - Manda informações do protocolo HTTP como status codes e headers ! Results.status() - Manda status codes com mais informações ! Results.referer() - Usa o header Referer para fazer redirects ou forwards.
OK) ! Results.xml() - Serializa objetos em XML ! Results.json() - Serializa objetos em JSON ! Results.representation() - Sinaliza objetos em formato determinado pela requisição
result.forwardTo(ClientesController.class).list() relativo à result.use(logic(). forwardTo(ClientesController.class).list(); ! result.reditectTo(ClientesController.class).list() relativo à result.use(logic(). redirectTo(ClientesController.class).list(); ! result.notFound() relativo à result.use(status()).notFound(); Atalhos no Result
seu cliente. @Controller public class PerfilController { ! public File foto(Perfil perfil) { return new File ("/path/para/a/foto"+ perfil.getId+".jpg"); } } Download