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)

KEY
Spring MVC - QConSP
Eduardo Bregaida
 
PDF
Introducao ao Spring Web MVC
Eder Magalhães
 
PPT
VRaptor - Alta produtividade no Desenvolvimento Web em Java
Daniel Faria Gomes
 
PDF
Como conectar programas em linguagem java a bases de dados
Henrique Fernandes
 
PPTX
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
Alexandre Rodrigues
 
PDF
Android DevConference - Dagger 2: uso avançado em projetos Android
iMasters
 
PPT
Tutorial Dwr - Configuração e Uso
Alexandre S. Oliveira
 
PDF
Android na Prática
Ramon Ribeiro Rabello
 
PDF
Integração do Flex com PHP através do AMFPHP
elliando dias
 
PDF
Use CDI em seus projetos Java !
Leonardo Brancalhão
 
PDF
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
PDF
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
David Robert Camargo de Campos
 
PDF
Automação e virtualização de serviços
Elias Nogueira
 
PPT
[CLPE] Design patterns com c#
Felipe Pimentel
 
PPTX
Persistência com JPA e Hibernate
Fernando Oliveira
 
PPTX
Programação Orientada por Objectos - Aula 2
Manuel Menezes de Sequeira
 
PPTX
Design patterns
DouglasSoaresAndrSch
 
PDF
Como escolher o Framework Java para web?
Anderson Araújo
 
PPTX
Git, GitHub e OO
DouglasSoaresAndrSch
 
PDF
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia
 
Spring MVC - QConSP
Eduardo Bregaida
 
Introducao ao Spring Web MVC
Eder Magalhães
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
Daniel Faria Gomes
 
Como conectar programas em linguagem java a bases de dados
Henrique Fernandes
 
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
Alexandre Rodrigues
 
Android DevConference - Dagger 2: uso avançado em projetos Android
iMasters
 
Tutorial Dwr - Configuração e Uso
Alexandre S. Oliveira
 
Android na Prática
Ramon Ribeiro Rabello
 
Integração do Flex com PHP através do AMFPHP
elliando dias
 
Use CDI em seus projetos Java !
Leonardo Brancalhão
 
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
David Robert Camargo de Campos
 
Automação e virtualização de serviços
Elias Nogueira
 
[CLPE] Design patterns com c#
Felipe Pimentel
 
Persistência com JPA e Hibernate
Fernando Oliveira
 
Programação Orientada por Objectos - Aula 2
Manuel Menezes de Sequeira
 
Design patterns
DouglasSoaresAndrSch
 
Como escolher o Framework Java para web?
Anderson Araújo
 
Git, GitHub e OO
DouglasSoaresAndrSch
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia
 
Anúncio

VRaptor4