SlideShare uma empresa Scribd logo
VRaptor 4
Renan Montenegro 
Desenvolvedor Java há mais de 4 anos, 
commiter no VRaptor 4 e membro ativo da lista 
de discussão oficial do VRaptor. Entusiasta 
SEO(Search Engine Optimization). 
@renanigt 
renanigt
Matheus Fechine 
Desenvolvedor Java há 6 anos, graduado em 
Ciência da Computação, pós graduado em 
Arquitetura Java, ambas pela Unifor, 
Coordenador da comunidade JavaCE e Viciado 
em Testes automatizados. 
@matheusmoura 
matheusfechine
O que é ?
MVC
MVC 
Modelo
Visão 
MVC
MVC 
Controller
Por quê ?
CDI
Extensível
Código Fluente
Testável
Serviço REST
Controller
@Controller 
public class UsuarioController { 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
} 
/usuario/index
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
} 
/inicio
View
VRaptor4
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
} 
CDI
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
index.jsp 
<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
${mensagem} 
</body> 
</html>
VRaptor4
CDI 
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
public UsuarioController() { 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
public UsuarioController() { 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
/** 
* @deprecated CDI eyes only. 
*/ 
protected UsuarioController() { 
this(null); 
}
Componentes
@RequestScoped 
public class UsuarioDao { 
public Usuario pesquisaUsuario(Long id) { 
//carrega Usuário do banco 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private UsuarioDao dao; 
public void pesquisarUsuario(Long id) { 
Usuario usuario = dao.pesquisaUsuario(id); 
} 
}
Redirecionamento 
e 
Forward
@Post 
public void adiciona(Usuario usuario) { 
result.redirectTo(this).index(); 
} 
Redirect
@Post 
public void adiciona(Usuario usuario) { 
result.forwardTo(this).index(); 
} 
Forward
Formulário
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
@Post 
public void adiciona(Usuario usuario) { 
}
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
@Post 
public void adiciona(Usuario usuario) { 
}
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
public class Usuario { 
private String login; 
private String senha; 
//getters e setters 
}
Validação
@Controller 
public class UsuarioController { 
@Inject 
private Validator validator; 
}
SimpleMessage message = new SimpleMessage("Login", 
"Login não preenchido"); 
validator.addIf(usuario.getLogin() == null, message);
validator.onErrorRedirectTo(this).index();
@Post 
public void adiciona(Usuario usuario) { 
SimpleMessage message = new SimpleMessage("Login", 
"Login não preenchido"); 
validator.addIf(usuario.getLogin() == null, message); 
validator.onErrorRedirectTo(this).index(); 
}
REST
@Get 
@Path("/usuario/{id}") 
public void visualiza(Long id) { 
}
@Get("/usuario/{id}") 
public void visualiza(Long id) { 
}
@Post("/usuario") 
public void adiciona(Usuario usuario) { 
}
@Put("/usuario") 
public void atualiza(Usuario usuario) { 
}
@Delete("/usuario") 
public void remove(Usuario usuario) { 
}
Serialização
public void carregaJson(Usuario usuario) { 
result.use(Results.json()) 
.from(usuario) 
.serialize(); 
}
public void carregaXml(Usuario usuario) { 
result.use(Results.xml()) 
.from(usuario) 
.serialize(); 
}
Interceptors
@Intercepts 
public class LoginInterceptor { 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@AroundCall 
public void intercept(SimpleInterceptorStack stack) { 
System.out.println("Antes da lógica."); 
stack.next(); // continua a execução 
System.out.println("Depois da lógica."); 
}
Testes Unitários
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
protected UsuarioController() { 
this(null); 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
Plugins
vraptor-brutauth
vraptor-jpa
vraptor-hibernate
vraptor-jasperreport
Mais VRaptor 4
www.vraptor.com.br 
https://github.com/caelum/vraptor4 
https://groups.google.com/group/caelum-vraptor
Dúvidas ?

Mais conteúdo relacionado

Mais procurados (10)

PPT
Fazendo Injeção de dependência com Unity 1.2
Giovanni Bassi
 
PPSX
Android - Programação para dispositivos móveis (Aula 2)
Ricardo Longa
 
PPSX
Aula 05/06 (Service)
Ricardo Longa
 
ODP
TDD - Algumas lições aprendidas com o livro GOOS
Fábio Miranda
 
PDF
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Rafael Ponte
 
PDF
Wicket 2008
Claudio Miranda
 
PDF
Java www
Mario Jorge Pereira
 
PDF
Artigoajax
MoisesInacio
 
PPTX
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Kaio Valente
 
PDF
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Caelum
 
Fazendo Injeção de dependência com Unity 1.2
Giovanni Bassi
 
Android - Programação para dispositivos móveis (Aula 2)
Ricardo Longa
 
Aula 05/06 (Service)
Ricardo Longa
 
TDD - Algumas lições aprendidas com o livro GOOS
Fábio Miranda
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Rafael Ponte
 
Wicket 2008
Claudio Miranda
 
Artigoajax
MoisesInacio
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Kaio Valente
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Caelum
 

Semelhante a VRaptor4 (20)

PPT
VRaptor - Alta produtividade no Desenvolvimento Web em Java
Daniel Faria Gomes
 
KEY
Spring MVC - QConSP
Eduardo Bregaida
 
PDF
Aula Introdução a VRaptor 4 - Pós Java UTFPR
André Luiz Forchesatto
 
PDF
Spring + Tapestry Um novo paradigma de desenvolvimento web
elliando dias
 
ODP
Vraptor apresentação das funcionalidades
Wilton Silva
 
PDF
Introdução ao vraptor
Vitor Zachi Junior
 
PDF
Mvc model view controller - java para desenvolvimento web
Valdir Junior
 
PPT
Desmistificando o cairngorm
Eric Cavalcanti
 
PDF
Spring MVC Framework
elliando dias
 
PPTX
Palestra VRaptor 3
Romero Meireles
 
PPT
Aula JPA
Marco Reis
 
PDF
Como escolher o Framework Java para web?
Anderson Araújo
 
PDF
Design OO
Mauricio De Diana
 
PPT
Spring Capitulo 03
Diego Pacheco
 
PDF
Persistência JPA
Átilla Silva Barros
 
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
PDF
Desenvolvimento web com VRaptor
Daniel Cavalcante
 
PDF
Teste de Integracao com DbUnit e JStryker
Washington Botelho
 
PDF
Spring e Injeção de Dependência
Daniel Cukier
 
PDF
Conhecendo o Spring
Maurício Linhares
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
Daniel Faria Gomes
 
Spring MVC - QConSP
Eduardo Bregaida
 
Aula Introdução a VRaptor 4 - Pós Java UTFPR
André Luiz Forchesatto
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
elliando dias
 
Vraptor apresentação das funcionalidades
Wilton Silva
 
Introdução ao vraptor
Vitor Zachi Junior
 
Mvc model view controller - java para desenvolvimento web
Valdir Junior
 
Desmistificando o cairngorm
Eric Cavalcanti
 
Spring MVC Framework
elliando dias
 
Palestra VRaptor 3
Romero Meireles
 
Aula JPA
Marco Reis
 
Como escolher o Framework Java para web?
Anderson Araújo
 
Spring Capitulo 03
Diego Pacheco
 
Persistência JPA
Átilla Silva Barros
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
Desenvolvimento web com VRaptor
Daniel Cavalcante
 
Teste de Integracao com DbUnit e JStryker
Washington Botelho
 
Spring e Injeção de Dependência
Daniel Cukier
 
Conhecendo o Spring
Maurício Linhares
 
Anúncio

VRaptor4