Usando JSF 2 e Primefaces com Spring ROO
Autor: Pedro Cavaléro | Publicado: 2011-05-01T23:10:00-03:00

Uma das funcionalidades ainda pendentes no Spring Roo é a utilização de JSF na camada de view. Hoje vou mostrar como colocar, de maneira rápida, o seu projeto Roo para trabalhar com JSF 2 e Primefaces.

Desde que conheci o Primefaces, fiquei bastante interessado em utilizá-lo em algum projeto. O JSF 2 parece ter resolvido boa parte dos problemas existentes no 1.x e sua utilização em projetos parece ser uma idéia bem interessante para novos projetos. Mas também gosto da facilidade do Spring Roo. Vamos então utilizar um projeto de exemplo do Primefaces&nbsp;prime-moviecollector.&nbsp;Ele utiliza Spring 3, Hibernate 3, JSF 2 e Primefaces. Vamos reimplementá-lo utilizando o Roo e retiraremos dele as configurações faltantes. Você vai notar que não mando colocar todas as configurações necessárias para o Spring funcionar com o JSF pois elas já estão parte feitas no prime-moviecollector e no nosso. Só vamos fazer as alterações que ainda faltam.

1) Criando o Projeto Roo com as entidades do Domínio (Movie e Format) e a view em Spring MVC:

project --topLevelPackage org.primefaces.examples.moviecollector --projectName Prime-moviecolletor-roo --java 6
persistence setup --database HYPERSONIC_IN_MEMORY --provider HIBERNATE
entity --class ~.domain.Movie
field string --fieldName title
field string --fieldName description
field number --fieldName discs --type java.lang.Integer
enum type --class ~.domain.Format
enum constant --name DVD
enum constant --name BLURAY
focus --class Movie
field enum --fieldName format --type ~.domain.Format
finder add findMoviesByTitleLike
web mvc setup
security setup2) Removendo os arquivos gerados pelo web mvc setup. Vamos utilizar apenas a estrutura:Em src/main/webapp as pastas images e styles;
Em&nbsp;src/main/webapp/WEB-INF&nbsp;as pastas i18n, layouts, spring, tags e view
3) Copiamos o src/main/webapp/WEB-INF/faces-config.xml do prime-moviecollector para o mesmo caminho no nosso projeto.
4) Vamos adicionar algumas dependências no pom.xml do nosso projeto:Em repositories

    prime-repo
    Prime Technology Maven Repository
    http://repository.prime.com.tr/

Em dependencies

    org.apache.poi
    poi
    3.2-FINAL


    com.lowagie
    itext
    2.1.7


    org.primefaces
    primefaces
    3.0-SNAPSHOT


    com.sun.faces
    jsf-api
    2.0.4-b09


    com.sun.faces
    jsf-impl
    2.0.4-b09
No caso estamos usando o Primefaces 3.0 mas poderíamos usar a versão 2.2.1 que é a estável.
5) Em&nbsp;src/main/webapp/WEB-INF/web.xml:Retiramos:

    HttpMethodFilter
    org.springframework.web.filter.HiddenHttpMethodFilter


    HttpMethodFilter
    /*


    Prime-moviecolletor-roo
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation/WEB-INF/spring/webmvc-config.xml
    1


    Prime-moviecolletor-roo
    /

E inserimos:

  
   org.springframework.web.context.request.RequestContextListener
  
 
 
  Faces Servlet
  javax.faces.webapp.FacesServlet
  1
 

 
  Faces Servlet
  *.jsf
 
Para adicionarmos as configurações para o JSF.
6) Configurações prontas, vamos copiar os já quase prontos Managed Beans (CreateMovie, ManageMovies e ViewMovie) para o nosso projeto no pacote org.primefaces.examples.moviecollector.view. Você irá notar que eles estarão com erros. Por quê? Porque o Spring Roo utiliza os métodos de acesso dentro das entidades (estilo Active Record), logo, nesse caso, não precisamos das classes de Service. Para ajustar nossas classes, basta retirarmos as dependências das classes de Service e utilizarmos os métodos de merge, find e update de dentro da entidade Movie. Fica como treino.
7) &nbsp;Por último, copiamos todas as telas xhtml e jsp (index, createMovie, manageMovies, source, template, viewMovie) e suas pastas img e style para a pasta webapp do nosso projeto.&nbsp;
8) &nbsp;Pronto! Basta rodar sua aplicação que ela já estará funcionando. Executar esse passos deve demorar cerca de 15-20 min. E ainda podemos adicionar novas entidades utilizando o Roo da maneira que já conhecemos, porém agora precisamos criar as telas para cada necessidade.&nbsp;
Creio que ajude! Comentários são bem-vindos!
Abraços!


Clique aqui para baixar o projeto completo.