Alta produtividade noDesenvolvimento Web em Java               Kaio Valente ksmvalente@gmail.com         @kaiovalente
Histórico
Action-Based x Component-Based
Listeners            actionEventSolução?
<filter>    <filter-name>vraptor</filter-name>    <filter-class>br.com.caelum.vraptor.VRaptor</filter-class></filter><filt...
Requisições/<nome_do_controller>/<nome_do_metodo>Redirecionamento/WEB-INF/jsp/<nome_do_controller>/<nome_do_metodo>.jspCol...
@Componentpublic class PropostaDAO {         ...}@Resourcepublic class PropostaController {         private PropostaDAO da...
<form action="${pageContext.request.contextPath}/proposta/adicionar">  Descrição: <input type="text" name=“proposta.descri...
@Resourcepublic class PropostaController {             private Validator validator;              public PropostaController...
• Validação com mensagens parametrizadas• Validação com Matchers do Hamcrest• Validação com Bean Validation e Hibernate Va...
@Convert(Estado.class)public class EstadoConverter implements Converter<Estado> {public Estado convert(String value, Class...
@Interceptspublic class LoginInterceptor implements Interceptor {          private Result result;          private UserSes...
public vod loadJSon(Proposta proposta) {  result.use(Results.json()).from(proposta).serialize();}Retorno{“proposta": { “de...
<context-param>    <param-name>br.com.caelum.vraptor.packages</filter-name>    <param-value>br.com.caelum.vraptor.util.jpa...
Comunidade• github.com/caelum/vraptor• caelum-vraptor@googlegroups.com• vraptor.caelum.com.br/comunidade.jsp
Onde Começar?• vraptor.caelum.com.br/documentacao/v  raptor3-guia-de-1-minuto• vraptor.caelum.com.br/documentacao/v  rapto...
Obrigado!              Kaio Valenteksmvalente@gmail.com         @kaiovalente
Upcoming SlideShare
Loading in...5
×

Vraptor - Alta produtividade no Desenvolvimento Web em Java

1,899

Published on

LT apresentada no evento TaSafoConf em 10/06/2012.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,899
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Vraptor - Alta produtividade no Desenvolvimento Web em Java

  1. 1. Alta produtividade noDesenvolvimento Web em Java Kaio Valente ksmvalente@gmail.com @kaiovalente
  2. 2. Histórico
  3. 3. Action-Based x Component-Based
  4. 4. Listeners actionEventSolução?
  5. 5. <filter> <filter-name>vraptor</filter-name> <filter-class>br.com.caelum.vraptor.VRaptor</filter-class></filter><filter-mapping> <filter-name>vraptor</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher></filter-mapping> @Resource public class PropostaController { public List<Proposta> listagem() { return new ArrayList<Proposta>(); } }
  6. 6. Requisições/<nome_do_controller>/<nome_do_metodo>Redirecionamento/WEB-INF/jsp/<nome_do_controller>/<nome_do_metodo>.jspColeções<tipoDaCollection>List<ul><c:forEach items="${propostaList}" var="proposta"> <li> ${proposta.codigo} - ${proposta.descricao} </li></c:forEach></ul>
  7. 7. @Componentpublic class PropostaDAO { ...}@Resourcepublic class PropostaController { private PropostaDAO dao; public PropostaController(PropostaDAO dao) { this.dao = dao; } public List<Proposta> listagem() { return new ArrayList<Proposta>(); }}
  8. 8. <form action="${pageContext.request.contextPath}/proposta/adicionar"> Descrição: <input type="text" name=“proposta.descricao" /><br/> Preço: <input type="text" name=“proposta.preco" /><br/> <input type="submit" value="Salvar" /></form> @Resource public class PropostaController { private PropostaDAO dao; private Result result; public PropostaController(PropostaDAO dao, Result result) { this.dao = dao; this.result = result; } public void adicionar(Proposta proposta) { dao.salvar(proposta); result.redirectTo(PropostaController.class).listagem(); } }
  9. 9. @Resourcepublic class PropostaController { private Validator validator; public PropostaController(Validator validator) { this.validator = validator; }}public void void adicionar(Proposta proposta) { if (proposta.getDescricao().isEmpty()) { validator.add(new ValidationMessage(“descricao.nao.informada", "erro")); } validator.onErrorUsePageOf(PropostaController.class).listagem(); dao.salvar(proposta); result.redirectTo(PropostaController.class).listagem();}public void void adicionar(final Proposta proposta) { validator.checking(new Validations() {{ that(!proposta.getDescricao().isEmpty(), "erro", " descricao.nao.informada"); }}); validator.onErrorUsePageOf(PropostaController.class).listagem(); dao.salvar(proposta); result.redirectTo(PropostaController.class).listagem();}
  10. 10. • Validação com mensagens parametrizadas• Validação com Matchers do Hamcrest• Validação com Bean Validation e Hibernate Validator• Validação com suporte a Internacionalização <ul> <c:forEach items="${errors}" var=“error"> <li> ${error.category} - ${error.message} </li> </c:forEach> </ul>
  11. 11. @Convert(Estado.class)public class EstadoConverter implements Converter<Estado> {public Estado convert(String value, Class<? extends Estado> type, ResourceBundle bundle) { if (value == null || value.equals("")) { return null; } Estado estado = new Estado(); try { estado.setId(Long.parseLong(value)); } catch (NumberFormatException e) { estado = null; } return estado; }}
  12. 12. @Interceptspublic class LoginInterceptor implements Interceptor { private Result result; private UserSession userSession;public LoginInterceptor(Result result, UserSession userSession) { this.result = result; this.userSession = userSession;}public boolean accepts(ResourceMethod method) { return true;}public void intercept(InterceptorStack stack, ResourceMethod method, Object resource) { if (userSession.isLogged()) { stack.next(method, resource); } else { result.redirectTo(LoginController.class).login(); }}
  13. 13. public vod loadJSon(Proposta proposta) { result.use(Results.json()).from(proposta).serialize();}Retorno{“proposta": { “descricao": “Proposta 1”}}public vod loadJSon(Proposta proposta) { result.use(Results.json()).from(proposta).include(“itemProposta”).serialize();}Retorno{“proposta": { “descricao": “Proposta 1“,“itemProposta“ { “codigo”: “cod01"} }}public vod loadJSon(Usuario usuario) { result.use(Results.json()).from(usuario).exclude(“senha”).serialize();}Retorno{"usuario": { "nome": "Joao", "login": "joao"}}
  14. 14. <context-param> <param-name>br.com.caelum.vraptor.packages</filter-name> <param-value>br.com.caelum.vraptor.util.jpa</filter-class></context-param>
  15. 15. Comunidade• github.com/caelum/vraptor• caelum-vraptor@googlegroups.com• vraptor.caelum.com.br/comunidade.jsp
  16. 16. Onde Começar?• vraptor.caelum.com.br/documentacao/v raptor3-guia-de-1-minuto• vraptor.caelum.com.br/documentacao/v raptor3-o-guia-inicial-de-10-minutos
  17. 17. Obrigado! Kaio Valenteksmvalente@gmail.com @kaiovalente

×