SlideShare uma empresa Scribd logo
1 de 29
Vantagens e Desvantagens do
        Spring MVC
          @bregaida
Muitos Frameworks MVC
• JSF
• Struts
• Spring             • WebWork
• Mentawai           • Play Framework
• VRaptor            • Click Framework
• Demoiselle         • JBanana
• JBoss Seam         • Etc
• Neo Framework
• Brutos Framework
Qual escolher?
Escolha aquele que atende seu
negócio e te deixa confortável.
Spring Framework
• Criado por Rod Johnson
• Framework não intrusivo
• Baseado em padrões IoC e Injeção de
  Dependência
• O Container se encarrega de instanciar as
  classes Java e definir suas dependências
• Possui uma arquitetura baseada em POJOs
  e Interfaces
Vantagens
• Simples e de fácil aprendizado
• Liberdade para trabalhar na View
• Integração simples com outros frameworks
• Navegação feita por anotações
• BindResult e ModelAndView faz todo trabalho
  nas telas para validação e estado da página
• Suporte a várias Views Freemaker, JSP, Velocity
• Integração com Hibernate Validator
Anotações mais utilizadas
•   @Repository - Repositório dos dados

•   @Service - Camada de Serviços

•   @Qualifier - Qual Bean deverá ser injetado

•   @Autowired - Injeção dos Beans

•   @Controller - Camada View

•   @RequestMapping - Mapeamento do caminho

•   @RequestParam - Recebimento dos Parametros

•   @ResponseBody -Suporte a REST

•   @Valid - Responsável pela validação do parametro ou
    formulário
@Repository
@Repository
public class ProdutoDao implements ProdutoDaoI {

//Aqui código da Classe

}
@Service

@Service
public class ProdutoService implements ProdutoServiceI{

//Aqui o código da classe

}
@Controller


@Controller
public class ProdutoController {

//Aqui o código da classe
}
@Autowired
@Service
public class ProdutoService implements ProdutoServiceI{

	 @Autowired
	 private ProdutoDao	 produtoDao;

}


@Controller
@RequestMapping("/produto/**")
public class ProdutoController {

	 @Autowired
	 private ProdutoService	produtoService;

}
@Qualifier
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
 
public class Customer {
 
" @Autowired
" @Qualifier("personA")
" private Person person;
" //...
}


                Fonte: http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
@RequestMapping
@Controller
@RequestMapping("/produto/**")
public class ProdutoController {

  @RequestMapping("/produto/formulario")
	 public ModelAndView formulario() {
	 	 return new ModelAndView("formulario").addObject("produtoForm", new
ProdutoForm());
	 }
	
	 @RequestMapping("/produto/adiciona")
	 public ModelAndView adiciona(@Valid ProdutoForm produtoForm,
BindingResult result) {
	 	 if (result.hasErrors()) {
	 	 	 return new
ModelAndView("formulario").addAllObjects(result.getModel());
	 	 }
	 	 populaBean(produtoForm);
	 	 produtoService.salva(produto);
	 	 return new ModelAndView("lista").addObject("produtos",
produtoService.pegaTodos());
	 }
}
@RequestParam

@RequestMapping(value = "/produto/remove", method = RequestMethod.GET)
	 public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id)
{
	 	 produto = new Produto();
	 	 produto.setId(id);
	 	 produtoService.remove(produto);
	 	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
}
@ResponseBody
      •       Basta incluir os jars Jackson no projeto e será retornado um
              JSON:

          •     jackson-core-asl-1.4.3.jar

          •     jackson-mapper-asl-1.4.3.jar


public @ResponseBody HashMap<String,Object> view(@RequestParam("start") int start,
@RequestParam("limit") int limit) {
        List<Produto> produtos = produtoService.pegaTodos();
        HashMap<String, Object> modelMap = new HashMap<String,Object>();
        modelMap.put("produtos", produtos);
        return modelMap;
	 }
@ResponseBody
                      Com Nice URL

@RequestMapping(value = "/{idParceiro}/{idModalidade}", method = RequestMethod.GET)
    @ResponseBody
    public Modalidade obtemModalidade(@PathVariable("idParceiro") Long idParceiro,
@PathVariable("idModalidade") Long idModalidade, HttpSession sessao){
        return modalidadeService.obtemModalidadePorParceiro(idParceiro, idModalidade);
    }
ModelAndView
@RequestMapping("/produto/formulario")
	 public ModelAndView formulario() {
	 	 return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm());
	 }
	
	 @RequestMapping("/produto/adiciona")
	 public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	 	 if (result.hasErrors()) {
	 	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	 	 }
	 	 populaBean(produtoForm);
	 	 produtoService.salva(produto);
	 	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	 }
@Valid
    No Atributo

     public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) {

     //Código do método

     }


    No Formulário

	    @RequestMapping("/produto/adiciona")
	    public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	    	 if (result.hasErrors()) {
	    	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	    	 }
	    	 populaBean(produtoForm);
	    	 produtoService.salva(produto);
	    	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	    }
BindResult

	   @RequestMapping("/produto/adiciona")
	   public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	   	 if (result.hasErrors()) {
	   	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	   	 }
	   	 populaBean(produtoForm);
	   	 produtoService.salva(produto);
	   	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	   }
Hibernate Validator

import org.hibernate.validator.constraints.NotEmpty;

public class ProdutoForm {

	   private Long id;
	   @NotEmpty(message = "Valor não pode ser vazio")
	   private String nome;
	   @NotEmpty(message = "Valor não pode ser vazio")
	   private String descricao;

}
Desvantagens
Ainda tem XMLs
Application-Config.xml
spring-servlet.xml
web.xml
Desvantagens

• Tratar erros como 400, 404, 500 não são
  simples de tratar
• Poucos componentes de tela feitos
• Ainda possui configurações em XML ou
  configurações em classes.
Quer saber mais?
•   http://www.caelum.com.br/curso/fj-27-spring-framework/

•   http://www.javawora.blogspot.com

•   http://www.edsongoncalves.com.br/category/spring-mvc-3-0/

•   http://chavesrodolfo.blogspot.com.br/2011/02/anotacoes-do-spring.html

•   http://valdemarjr.net/2011/02/18/exemplo-spring-mvc-integrado-com-struts-
    tiles.html

•   http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html

•   http://maestric.com/doc/java/spring

•   http://netbeans.org/kb/docs/web/quickstart-webapps-spring_pt_BR.html

•   http://www.mkyong.com/spring-mvc/spring-mvc-hello-world-example/

•   http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
Obrigado!


       eduardo.bregaida@gmail.com
        http://javawora.blogspot.com
http://www.slideshare.net/eduardo.bregaida
                  @bregaida

Mais conteúdo relacionado

Mais procurados

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 

Mais procurados (20)

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
THREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃOTHREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃO
 
Java Coleções
Java ColeçõesJava Coleções
Java Coleções
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Curso JavaScript - Aula sobre DOM e Ajax
Curso JavaScript - Aula sobre DOM e AjaxCurso JavaScript - Aula sobre DOM e Ajax
Curso JavaScript - Aula sobre DOM e Ajax
 

Destaque

Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
Sualeh Fatehi
 

Destaque (11)

Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
DDD - Linguagem Ubíqua
DDD - Linguagem UbíquaDDD - Linguagem Ubíqua
DDD - Linguagem Ubíqua
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with Clojure
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 

Semelhante a Spring MVC - QConSP

Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
Felipe Pimentel
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 

Semelhante a Spring MVC - QConSP (20)

Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Vraptor
VraptorVraptor
Vraptor
 
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
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
 
ASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidades
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
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
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
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
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 

Mais de Eduardo Bregaida

Mais de Eduardo Bregaida (20)

War Room - Bregaida - V1
War Room - Bregaida - V1War Room - Bregaida - V1
War Room - Bregaida - V1
 
Feedbacks - V1
Feedbacks - V1Feedbacks - V1
Feedbacks - V1
 
Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensa
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. Revisada
 
Minha história
Minha históriaMinha história
Minha história
 
Java acsp
Java acspJava acsp
Java acsp
 
Aula 15 minutos
Aula 15 minutosAula 15 minutos
Aula 15 minutos
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
 
Scrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourScrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tour
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
 
Virus em Hw
Virus em HwVirus em Hw
Virus em Hw
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs Final
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr House
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De Trabalho
 
Agile SCRUM
Agile SCRUMAgile SCRUM
Agile SCRUM
 

Spring MVC - QConSP

  • 1. Vantagens e Desvantagens do Spring MVC @bregaida
  • 3. • JSF • Struts • Spring • WebWork • Mentawai • Play Framework • VRaptor • Click Framework • Demoiselle • JBanana • JBoss Seam • Etc • Neo Framework • Brutos Framework
  • 5. Escolha aquele que atende seu negócio e te deixa confortável.
  • 6. Spring Framework • Criado por Rod Johnson • Framework não intrusivo • Baseado em padrões IoC e Injeção de Dependência • O Container se encarrega de instanciar as classes Java e definir suas dependências • Possui uma arquitetura baseada em POJOs e Interfaces
  • 7. Vantagens • Simples e de fácil aprendizado • Liberdade para trabalhar na View • Integração simples com outros frameworks • Navegação feita por anotações • BindResult e ModelAndView faz todo trabalho nas telas para validação e estado da página • Suporte a várias Views Freemaker, JSP, Velocity • Integração com Hibernate Validator
  • 8. Anotações mais utilizadas • @Repository - Repositório dos dados • @Service - Camada de Serviços • @Qualifier - Qual Bean deverá ser injetado • @Autowired - Injeção dos Beans • @Controller - Camada View • @RequestMapping - Mapeamento do caminho • @RequestParam - Recebimento dos Parametros • @ResponseBody -Suporte a REST • @Valid - Responsável pela validação do parametro ou formulário
  • 9. @Repository @Repository public class ProdutoDao implements ProdutoDaoI { //Aqui código da Classe }
  • 10. @Service @Service public class ProdutoService implements ProdutoServiceI{ //Aqui o código da classe }
  • 12. @Autowired @Service public class ProdutoService implements ProdutoServiceI{ @Autowired private ProdutoDao produtoDao; } @Controller @RequestMapping("/produto/**") public class ProdutoController { @Autowired private ProdutoService produtoService; }
  • 13. @Qualifier import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;   public class Customer {   " @Autowired " @Qualifier("personA") " private Person person; " //... } Fonte: http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
  • 14. @RequestMapping @Controller @RequestMapping("/produto/**") public class ProdutoController { @RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); } }
  • 15. @RequestParam @RequestMapping(value = "/produto/remove", method = RequestMethod.GET) public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) { produto = new Produto(); produto.setId(id); produtoService.remove(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 16. @ResponseBody • Basta incluir os jars Jackson no projeto e será retornado um JSON: • jackson-core-asl-1.4.3.jar • jackson-mapper-asl-1.4.3.jar public @ResponseBody HashMap<String,Object> view(@RequestParam("start") int start, @RequestParam("limit") int limit) { List<Produto> produtos = produtoService.pegaTodos(); HashMap<String, Object> modelMap = new HashMap<String,Object>(); modelMap.put("produtos", produtos); return modelMap; }
  • 17. @ResponseBody Com Nice URL @RequestMapping(value = "/{idParceiro}/{idModalidade}", method = RequestMethod.GET)     @ResponseBody     public Modalidade obtemModalidade(@PathVariable("idParceiro") Long idParceiro, @PathVariable("idModalidade") Long idModalidade, HttpSession sessao){         return modalidadeService.obtemModalidadePorParceiro(idParceiro, idModalidade);     }
  • 18. ModelAndView @RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 19. @Valid No Atributo public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) { //Código do método } No Formulário @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 20. BindResult @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 21. Hibernate Validator import org.hibernate.validator.constraints.NotEmpty; public class ProdutoForm { private Long id; @NotEmpty(message = "Valor não pode ser vazio") private String nome; @NotEmpty(message = "Valor não pode ser vazio") private String descricao; }
  • 27. Desvantagens • Tratar erros como 400, 404, 500 não são simples de tratar • Poucos componentes de tela feitos • Ainda possui configurações em XML ou configurações em classes.
  • 28. Quer saber mais? • http://www.caelum.com.br/curso/fj-27-spring-framework/ • http://www.javawora.blogspot.com • http://www.edsongoncalves.com.br/category/spring-mvc-3-0/ • http://chavesrodolfo.blogspot.com.br/2011/02/anotacoes-do-spring.html • http://valdemarjr.net/2011/02/18/exemplo-spring-mvc-integrado-com-struts- tiles.html • http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html • http://maestric.com/doc/java/spring • http://netbeans.org/kb/docs/web/quickstart-webapps-spring_pt_BR.html • http://www.mkyong.com/spring-mvc/spring-mvc-hello-world-example/ • http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
  • 29. Obrigado! eduardo.bregaida@gmail.com http://javawora.blogspot.com http://www.slideshare.net/eduardo.bregaida @bregaida

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n