SlideShare ist ein Scribd-Unternehmen logo
1 von 17
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

Weitere ähnliche Inhalte

Andere mochten auch

Hatch site
Hatch site Hatch site
Hatch site Hatch
 
Crowdfunding in België 2014
Crowdfunding in België 2014Crowdfunding in België 2014
Crowdfunding in België 2014Gijsbert Koren
 
Cloud solutions in the railway sector
Cloud solutions in the railway sectorCloud solutions in the railway sector
Cloud solutions in the railway sectorMMEEVV
 
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 groupNicol Vrettou
 
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιο
2012 ΚΑΘΑΡΑ ΔΕΥΤΕΡΑ19ο γυμνασιοTsormpatzoglou Nestor
 
Qualify leads
Qualify leadsQualify leads
Qualify leadsHatch
 
Millennials
MillennialsMillennials
MillennialsHatch
 
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 indonetwork747
 
Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016Saferinternet.gr newsletter issue1_2016
Saferinternet.gr newsletter issue1_2016Tsormpatzoglou Nestor
 
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 v6Strongback 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 TrainingBizLibrary
 

Andere mochten auch (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
 

Ähnlich wie 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 JavaDaniel Faria Gomes
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
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 dadosHenrique 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çãoRafael Garcia
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfGabrielaMota46
 
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 JavascriptMichel Ribeiro
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato 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 FirebaseYgor 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 - UNEBLuciano Borges
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010rafaelferreira
 
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 EELoiane Groner
 

Ähnlich wie 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