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 prime-moviecollector. 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 setup
2) Removendo os arquivos gerados pelo web mvc setup. Vamos utilizar apenas a estrutura:
- Em src/main/webapp as pastas images e styles;
- Em src/main/webapp/WEB-INF 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 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) 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.
8) 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.
Creio que ajude! Comentários são bem-vindos!

9 comentários:
Parabéns pela iniciativa! començando estudar Spring Roo e vou tentar utilizar Primefaces
Que horror... não tem como zipar o projeto não?
bem, o ultimo link do artigo eh o do projeto zipado. o roo 1.2 ta vindo com jsf e primefaces nativo, nao vai mais precisar..
Olá Pedro.
Cara, muito legal seu post. Estou estudando sobre Spring, Hibernate e JSF. E esse seu post é muito bom.
Além disse, fui "apresentado" ao SpringRoo.
Cara, isso é fantástico.
Acabei de assistir o vídeo contido na págin do projeto ( http://www.springsource.org/spring-roo ). Meu é incrível o que ele faz, tipo, alta produtividade. Eu fiquei rindo sozinho aqui, todo surpreso e pensando "Não acredito que criaram isso". É muito alta a produtividade, pelo que eu estou vendo.
E eu não vi isso, do SpringRoo 1.2 estar integrado. Está? Não entendi seu comentário, tipo, não preciso configurar como você fez no post?
Cara, obrigado mesmo pelo seu post. Por compartilhar seu conhecimento.
Obrigado!
Olá!
Sim, no Roo 1.2 o JSF com Primefaces já vai estar integrado, aí não vai mais precisar fazer como eu fiz no post. Eu até já fiz um teste (baixando o código atual deles) e está funcionando mto bem. Eu inclusive sugiro esperar sair a versão nova se quiser colocar alguma coisa em produção.
Valeu!
Opa, como você fez com o roo 1.2?
A versão 1.2.0.RC1 já tem essa funcionalidade. Dá uma olhada no link: http://blog.springsource.org/2011/11/23/spring-roo-1-2-0-rc1-released/
NO Jira deles tem mais informações: https://jira.springsource.org/browse/ROO-516
Abraços!
Olá Pedro!
Muito bom seu post.
Depois de lê-lo resolvi criar minha aplicação usando Spring roo 1.2 e STS 2.8. Seria tudo perfeito se não fosse pelo fato do el não está funcionando.
Cara, será que você teria alguma ideia pra me ajudar?
Obrigado.
Postar um comentário