SlideShare uma empresa Scribd logo
Alta produtividade no
Desenvolvimento Web em Java
               Kaio Valente

 ksmvalente@gmail.com         @kaiovalente
Histórico
Action-Based x Component-Based
Listeners
            actionEvent


Solução?
<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>();
         }
 }
Requisições
/<nome_do_controller>/<nome_do_metodo>

Redirecionamento
/WEB-INF/jsp/<nome_do_controller>/<nome_do_metodo>.jsp

Coleções
<tipoDaCollection>List


<ul>
<c:forEach items="${propostaList}" var="proposta">
  <li> ${proposta.codigo} - ${proposta.descricao} </li>
</c:forEach>
</ul>
@Component
public class PropostaDAO {
         ...
}

@Resource
public class PropostaController {

         private PropostaDAO dao;

         public PropostaController(PropostaDAO dao) {
                  this.dao = dao;
         }

         public List<Proposta> listagem() {
                  return new ArrayList<Proposta>();
         }
}
<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();
         }
 }
@Resource
public 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();
}
• 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>
@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;
  }

}
@Intercepts
public 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();
    }
}
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"
}}
<context-param>
    <param-name>br.com.caelum.vraptor.packages</filter-name>
    <param-value>br.com.caelum.vraptor.util.jpa</filter-class>
</context-param>
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
  raptor3-o-guia-inicial-de-10-minutos
Obrigado!


              Kaio Valente

ksmvalente@gmail.com         @kaiovalente

Mais conteúdo relacionado

Destaque

Hatch site
Hatch site Hatch site
Hatch site
Hatch
 
Crowdfunding in België 2014
Crowdfunding in België 2014Crowdfunding in België 2014
Crowdfunding in België 2014
Gijsbert Koren
 
Presentatie groep 5 en 6
Presentatie groep 5 en 6Presentatie groep 5 en 6
Presentatie groep 5 en 6
Nila Zuijderduijn
 
Cloud solutions in the railway sector
Cloud solutions in the railway sectorCloud solutions in the railway sector
Cloud solutions in the railway sector
MMEEVV
 
Diapositivasmantenimientoportatil 101207122841-phpapp01
Diapositivasmantenimientoportatil 101207122841-phpapp01Diapositivasmantenimientoportatil 101207122841-phpapp01
Diapositivasmantenimientoportatil 101207122841-phpapp01Paolita Sarchi
 
Who we are: our e twinning group
Who we are: our e twinning groupWho we are: our e twinning group
Who we are: our e twinning group
Nicol Vrettou
 
Our Town Modugno
Our Town ModugnoOur Town Modugno
Our Town Modugno
Nicol Vrettou
 
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιοTsormpatzoglou Nestor
 
Qualify leads
Qualify leadsQualify leads
Qualify leads
Hatch
 
Millennials
MillennialsMillennials
Millennials
Hatch
 
El Mundo de Sofia 1 PARTE
El Mundo de Sofia 1 PARTEEl Mundo de Sofia 1 PARTE
El Mundo de Sofia 1 PARTE
Gianfranco Cairo López
 
Contoh Soal Kuis Online
Contoh Soal Kuis OnlineContoh Soal Kuis Online
Contoh Soal Kuis OnlineHendro Pramono
 
Naco presentation indo
Naco presentation indoNaco presentation indo
Naco presentation indo
network747
 
Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016
Tsormpatzoglou Nestor
 
1940
19401940
IBM Collaborative Lifecycle Management Solution for DevOps v6
IBM Collaborative Lifecycle Management Solution for DevOps v6IBM Collaborative Lifecycle Management Solution for DevOps v6
IBM Collaborative Lifecycle Management Solution for DevOps v6
Strongback Consulting
 
Onboard, Not Overboard: 5 Ways to Accelerate New Hire Training
Onboard, Not Overboard: 5 Ways to Accelerate New Hire TrainingOnboard, Not Overboard: 5 Ways to Accelerate New Hire Training
Onboard, Not Overboard: 5 Ways to Accelerate New Hire Training
BizLibrary
 

Destaque (20)

Eltiempoescomounrio
EltiempoescomounrioEltiempoescomounrio
Eltiempoescomounrio
 
Hatch site
Hatch site Hatch site
Hatch site
 
Crowdfunding in België 2014
Crowdfunding in België 2014Crowdfunding in België 2014
Crowdfunding in België 2014
 
Presentatie groep 5 en 6
Presentatie groep 5 en 6Presentatie groep 5 en 6
Presentatie groep 5 en 6
 
Cloud solutions in the railway sector
Cloud solutions in the railway sectorCloud solutions in the railway sector
Cloud solutions in the railway sector
 
My CV (3)
My CV (3)My CV (3)
My CV (3)
 
Diapositivasmantenimientoportatil 101207122841-phpapp01
Diapositivasmantenimientoportatil 101207122841-phpapp01Diapositivasmantenimientoportatil 101207122841-phpapp01
Diapositivasmantenimientoportatil 101207122841-phpapp01
 
Who we are: our e twinning group
Who we are: our e twinning groupWho we are: our e twinning group
Who we are: our e twinning group
 
Our Town Modugno
Our Town ModugnoOur Town Modugno
Our Town Modugno
 
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
 
Qualify leads
Qualify leadsQualify leads
Qualify leads
 
Millennials
MillennialsMillennials
Millennials
 
El Mundo de Sofia 1 PARTE
El Mundo de Sofia 1 PARTEEl Mundo de Sofia 1 PARTE
El Mundo de Sofia 1 PARTE
 
CloudCamp VLC DevOps
CloudCamp VLC DevOpsCloudCamp VLC DevOps
CloudCamp VLC DevOps
 
Contoh Soal Kuis Online
Contoh Soal Kuis OnlineContoh Soal Kuis Online
Contoh Soal Kuis Online
 
Naco presentation indo
Naco presentation indoNaco presentation indo
Naco presentation indo
 
Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016
 
1940
19401940
1940
 
IBM Collaborative Lifecycle Management Solution for DevOps v6
IBM Collaborative Lifecycle Management Solution for DevOps v6IBM Collaborative Lifecycle Management Solution for DevOps v6
IBM Collaborative Lifecycle Management Solution for DevOps v6
 
Onboard, Not Overboard: 5 Ways to Accelerate New Hire Training
Onboard, Not Overboard: 5 Ways to Accelerate New Hire TrainingOnboard, Not Overboard: 5 Ways to Accelerate New Hire Training
Onboard, Not Overboard: 5 Ways to Accelerate New Hire Training
 

Semelhante a Vraptor - Alta produtividade no Desenvolvimento Web em Java

VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
Daniel Faria Gomes
 
VRaptor4
VRaptor4VRaptor4
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
Eder Magalhães
 
JQuery
JQuery JQuery
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
grupoweblovers
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
Henrique Fernandes
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia
 
Mvc sem Controller
Mvc sem ControllerMvc sem Controller
Mvc sem Controller
Milfont Consulting
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
GabrielaMota46
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014David Robert Camargo de Campos
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
Renato Haddad
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com Firebase
Ygor César
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
Adler Medrado
 
Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010
rafaelferreira
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Loiane Groner
 

Semelhante a Vraptor - Alta produtividade no Desenvolvimento Web em Java (20)

VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
JQuery
JQuery JQuery
JQuery
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Mvc sem Controller
Mvc sem ControllerMvc sem Controller
Mvc sem Controller
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com Firebase
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 

Vraptor - Alta produtividade no Desenvolvimento Web em Java

  • 1. Alta produtividade no Desenvolvimento Web em Java Kaio Valente ksmvalente@gmail.com @kaiovalente
  • 4. Listeners actionEvent Solução?
  • 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>(); } }
  • 7. @Component public class PropostaDAO { ... } @Resource public class PropostaController { private PropostaDAO dao; public PropostaController(PropostaDAO dao) { this.dao = dao; } public List<Proposta> listagem() { return new ArrayList<Proposta>(); } }
  • 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. @Resource public 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. • 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. @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. @Intercepts public 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. 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. <context-param> <param-name>br.com.caelum.vraptor.packages</filter-name> <param-value>br.com.caelum.vraptor.util.jpa</filter-class> </context-param>
  • 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. Obrigado! Kaio Valente ksmvalente@gmail.com @kaiovalente