Você está na página 1de 8

30/08/13

Com partilhar

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


3

mais

Prximo blog

Criar um blog

Login

quinta-feira, 5 de janeiro de 2012

Pesquisar
Pesquisar

FileUpload com JSF + Primefaces + Hibernate + MySql


Nesse tutorial, tentarei explicar como fazer o upload de imagem, salvar o arquivo em um diretrio e gravar o nome dele no banco (mysql) para depois ser exibido em uma view (usando o JSF). O projeto que vamos fazer simples, ser o cadastro de um produto com os seguintes atributos: id, nome, preo e foto do produto. ==> Crie a base de dados ou utilize uma j existente, no meu caso, irei criar uma nova base de dados com o nome fileUpload. ==> Crie um novo projeto web com suporte a JSF, Primefaces e Hibernate (utilizando o banco criado acima). ==> Crie a estrutura de pacotes - managedBean (controller) - dao (persistncia) - entidades (POJO) ==> Agora vamos fazer o POJO de produtos. Dentro do pacote entidades crie uma nova classe com o nome Produto

Arquivo do blog
2012 (2) Janeiro (2) FileUpload com JSF + Primefaces + Hibernate + MySq... Upload de Arquivo com JSF + Primefaces (j vem no ... 2011 (2)

2 5 p a c k a g ee n t i d a d e s ; 6 7 / * * 8 9 1 0 * *@ a u t h o rM a r a * /

Livros e Revistas
k19 - Apostila de Hibernate K19 - Apostila de JSF Use a Cabea Java

1 1 i m p o r tj a v a x . p e r s i s t e n c e . * ; 1 2 @ E n t i t y 1 3 @ T a b l e ( n a m e = " t b _ p r o d u t o " ) 1 4 p u b l i cc l a s sP r o d u t o { 1 5 @ I d 1 6 @ G e n e r a t e d V a l u e ( s t r a t e g y = G e n e r a t i o n T y p e . A U T O ) 1 7 @ C o l u m n ( n a m e = " p r o d _ i d " ) 1 8 p r i v a t ei n ti d ; 1 9 @ C o l u m n ( n a m e = " p r o d _ n o m e " ) 2 0 p r i v a t eS t r i n gn o m e ; 2 1 @ C o l u m n ( n a m e = " p r o d _ p r e c o " ) 2 2 p r i v a t ed o u b l ep r e c o ; 2 3 @ C o l u m n ( n a m e = " p r o d _ f o t o " ) 2 4 p r i v a t eS t r i n gf o t o ; 2 5 / /C o n s t r u t o rg e t t e r ses e t t e r s 2 9
J um membro? Fazer login

Seguidores
Participar deste site
Google Friend Connect

Membros (3)

Obs.: faa o import das anotaes do pacote javax.persistence.* ==> Crie a classe HibernateUtil dentro do pacote dao. caso tenha dvida de como implementar a HibernateUtil consulte http://meninajava.blogspot.com/2011/11/configurar-o-hibernate-utilizando.html ==> Adicione o mapeamento da classe Produto no arquivo hibernate.cfg.xml e habilite para hibernate criar automaticamente a tabela no banco.

1 0 < p r o p e r t yn a m e = " h i b e r n a t e . h b m 2 d d l . a u t o " > u p d a t e < / p r o p e r t y > 1 1 < m a p p i n gc l a s s = " e n t i d a d e s . P r o d u t o " / > 1 2

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

1/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql

Agora vamos fazer a classe ProdutoDao que ter os metdos para persistir e consultar os dados do banco. ==> Dentro do pacote dao, crie uma nova classe com o nome ProdutoDao e implemente pelo menos os metdos de salvar e consultar todos os produtos, para este tutorial iremos utilizar somente estes dois.

3 p a c k a g ed a o ; 4 8 i m p o r te n t i d a d e s . P r o d u t o ; 9 i m p o r tj a v a . u t i l . L i s t ; 1 0 i m p o r to r g . h i b e r n a t e . S e s s i o n ; 1 1 1 2 p u b l i cc l a s sP r o d u t o D a o{ 1 3 p u b l i cv o i ds a l v a r ( P r o d u t op r o d u t o ) { 1 4 S e s s i o ns e s s i o n=H i b e r n a t e U t i l . g e t S e s s i o n ( ) ; 1 5 s e s s i o n . b e g i n T r a n s a c t i o n ( ) . b e g i n ( ) ; 1 6 s e s s i o n . s a v e O r U p d a t e ( p r o d u t o ) ; 1 7 s e s s i o n . g e t T r a n s a c t i o n ( ) . c o m m i t ( ) ; 1 8 s e s s i o n . c l o s e ( ) ; 1 9 S y s t e m . o u t . p r i n t l n ( " S a l v oc o ms u c e s s o " ) ; 2 0 } 2 1 2 2 p u b l i cL i s t < P r o d u t o >l i s t a r ( ) { 2 3 S e s s i o ns e s s i o n =H i b e r n a t e U t i l . g e t S e s s i o n ( ) ; 2 4 S t r i n gs q l=" S E L E C TpF R O MP r o d u t op " ; 2 5 r e t u r n( L i s t < P r o d u t o > )s e s s i o n . c r e a t e Q u e r y ( s q l ) . l i s t ( ) ; 2 6 } 2 7 }

==> Faa o download de duas bibliotecas extras:

commons-io http://commons.apache.org/io/download_io.cgi commons-fileupload http://commons.apache.org/fileupload/download_fileupload.cgi Aps baixar os arquivos, adicione as depedncias ao seu projeto.

==> Configure o arquivo web.xml adicionando o filter do fileUpload. <f i l t e r > <f i l t e r n a m e >P r i m e F a c e sF i l e U p l o a dF i l t e r </ f i l t e r n a m e > <f i l t e r c l a s s > o r g . p r i m e f a c e s . w e b a p p . f i l t e r . F i l e U p l o a d F i l t e r </ f i l t e r c l a s s > </ f i l t e r > <f i l t e r m a p p i n g > <f i l t e r n a m e > P r i m e F a c e sF i l e U p l o a dF i l t e r </ f i l t e r n a m e > <s e r v l e t n a m e >F a c e sS e r v l e t </ s e r v l e t n a m e > </ f i l t e r m a p p i n g >

No post anterior fiz o mtodo de upload do arquivo no mangedBean, para faciliar as futuras implementaes desta funcionalidade, criei uma classe UploadArquivo que ficar responsvel pelo upload. Assim quando o usurio pressionar o boto salvar do formulrio, armazenado o arquivo e os dados no banco. ==> No pacote managedBean crie uma nova classe com o nome UploadArquivo e implemente o cdigo abaixo.
5 p a c k a g em a n a g e d B e a n ; 6 7 i m p o r tj a v a . i o . F i l e ; 8 i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; 9 i m p o r tj a v a . u t i l . l o g g i n g . L e v e l ; 1 0 i m p o r tj a v a . u t i l . l o g g i n g . L o g g e r ; 1 1 i m p o r tj a v a x . f a c e s . c o n t e x t . E x t e r n a l C o n t e x t ;

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

2/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


1 2 i m p o r tj a v a x . f a c e s . c o n t e x t . F a c e s C o n t e x t ; 1 3 i m p o r tj a v a x . s e r v l e t . S e r v l e t C o n t e x t ; 1 4 i m p o r tj a v a x . s e r v l e t . h t t p . H t t p S e r v l e t R e s p o n s e ; 1 5 i m p o r to r g . p r i m e f a c e s . e v e n t . F i l e U p l o a d E v e n t ; 1 6 2 1 p u b l i cc l a s sU p l o a d A r q u i v o{ 2 2 p r i v a t eS t r i n gd i r e t o r i o ; 2 3 p r i v a t eS t r i n gc a m i n h o ; 2 4 p r i v a t eb y t e [ ]a r q u i v o ; 2 5 p r i v a t eS t r i n gn o m e ; 2 6 2 7 p u b l i cU p l o a d A r q u i v o ( ){ 2 8 } 4 6 p u b l i cS t r i n gg e t N o m e ( ){ 4 7 r e t u r nn o m e ; 4 8 } 5 4 p u b l i cS t r i n gg e t R e a l P a t h ( ){ 5 5 5 6 E x t e r n a l C o n t e x te x t e r n a l C o n t e x t= F a c e s C o n t e x t . g e t C u r r e n t I n s t a n c e ( ) . g e t E x t e r n a l C o n t e x t ( ) ; H t t p S e r v l e t R e s p o n s er e s p o n s e= ( H t t p S e r v l e t R e s p o n s e )e x t e r n a l C o n t e x t . g e t R e s p o n s e ( ) ;

5 7 5 8 F a c e s C o n t e x ta F a c e s C o n t e x t=F a c e s C o n t e x t . g e t C u r r e n t I n s t a n c e ( ) ; 5 9 S e r v l e t C o n t e x tc o n t e x t= ( S e r v l e t C o n t e x t )a F a c e s C o n t e x t . g e t E x t e r n a l C o n t e x t ( ) . g e t C o n t e x t ( ) ;

6 0 6 1 r e t u r nc o n t e x t . g e t R e a l P a t h ( " / " ) ; 6 2 } 6 3 6 4 p u b l i cv o i df i l e U p l o a d ( F i l e U p l o a d E v e n te v e n t ,S t r i n gt y p e ,S t r i n gd i r e t o r i o ){ 6 5 t r y{ 6 6 t h i s . n o m e=n e wj a v a . u t i l . D a t e ( ) . g e t T i m e ( )+t y p e ; 6 7 t h i s . c a m i n h o=g e t R e a l P a t h ( )+d i r e t o r i o+g e t N o m e ( ) ; 6 8 t h i s . a r q u i v o=e v e n t . g e t F i l e ( ) . g e t C o n t e n t s ( ) ; 6 9 7 0 F i l ef i l e=n e wF i l e ( g e t R e a l P a t h ( )+d i r e t o r i o ) ; 7 1 f i l e . m k d i r s ( ) ; 7 2 7 3 }c a t c h( E x c e p t i o ne x ){ 7 4 S y s t e m . o u t . p r i n t l n ( " E r r on ou p l o a dd oa r q u i v o "+e x ) ; 7 5 } 7 6 } 7 7 7 8 p u b l i cv o i dg r a v a r ( ) { 7 9 8 0 t r y{ 8 1 8 2 F i l e O u t p u t S t r e a mf o s ; 8 3 f o s=n e wF i l e O u t p u t S t r e a m ( t h i s . c a m i n h o ) ; 8 4 f o s . w r i t e ( t h i s . a r q u i v o ) ; 8 5 f o s . c l o s e ( ) ; 8 6 8 7 }c a t c h( E x c e p t i o ne x ){ 8 8 S y s t e m . o u t . p r i n t l n ( e x ) ; 8 9 } 9 0 9 1 } 9 2 }

Linha 54 - O mtodo getRealPath pega o diretrio completo da sua aplicao no servidor. Linha 64 - O mtodo fileUpload ir fazer o carregamento do arquivo e prepara-lo para ser gravado. Linha 78 - O mtodo salvar, grava o arquivo no diretrio informado. Os arquivos sero armazenados na pasta build/web/nomediretorio do seu projeto. ==> No pacote managedBean crie uma nova classe com o nome ProdutoManagedBean e implemente o cdigo abaixo.

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

3/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


5 p a c k a g em a n a g e d B e a n ; 6 7 i m p o r tj a v a x . f a c e s . b e a n . M a n a g e d B e a n ; 8 i m p o r tj a v a x . f a c e s . b e a n . S e s s i o n S c o p e d ; 9 i m p o r te n t i d a d e s . P r o d u t o ; 1 0 i m p o r td a o . P r o d u t o D a o ; 1 1 i m p o r tj a v a . u t i l . A r r a y L i s t ; 1 2 i m p o r tj a v a . u t i l . L i s t ; 1 3 i m p o r to r g . p r i m e f a c e s . e v e n t . F i l e U p l o a d E v e n t ; 1 4 / * * 1 5 1 6 1 7 * *@ a u t h o rM a r a * /

1 8 @ M a n a g e d B e a n ( n a m e = " p r o d u t o M B " ) 1 9 @ S e s s i o n S c o p e d 2 0 p u b l i cc l a s sP r o d u t o M a n a g e d B e a n{ 2 1 p r i v a t eP r o d u t op r o d u t o ; 2 2 p r i v a t eL i s t < P r o d u t o >l i s t a r P r o d u t o s ; 2 3 p r i v a t eU p l o a d A r q u i v oa r q u i v o=n e wU p l o a d A r q u i v o ( ) ; 2 4 2 5 p u b l i cP r o d u t o M a n a g e d B e a n ( ){ 2 6 t h i s . p r o d u t o=n e wP r o d u t o ( ) ; 2 7 t h i s . l i s t a r P r o d u t o s=n e wA r r a y L i s t < P r o d u t o > ( ) ; 2 8 } 2 9 3 0 p u b l i cL i s t < P r o d u t o >g e t L i s t a r P r o d u t o s ( ){ 3 1 r e t u r nn e wP r o d u t o D a o ( ) . l i s t a r ( ) ; 3 2 / / r e t u r nt h i s . l i s t a r P r o d u t o s ; 3 3 } 3 4 3 5 p u b l i cv o i ds e t L i s t a r P r o d u t o s ( L i s t < P r o d u t o >l i s t a r P r o d u t o s ){ 3 6 t h i s . l i s t a r P r o d u t o s=l i s t a r P r o d u t o s ; 3 7 } 3 8 3 9 p u b l i cP r o d u t og e t P r o d u t o ( ){ 4 0 r e t u r np r o d u t o ; 4 1 } 4 2 4 3 p u b l i cv o i ds e t P r o d u t o ( P r o d u t op r o d u t o ){ 4 4 t h i s . p r o d u t o=p r o d u t o ; 4 5 } 4 6 4 7 p u b l i cv o i du p l o a d A c t i o n( F i l e U p l o a d E v e n te v e n t ) { 4 8 t h i s . a r q u i v o . f i l e U p l o a d ( e v e n t ," . j p g " ," / i m a g e / " ) ; 4 9 t h i s . p r o d u t o . s e t F o t o ( t h i s . a r q u i v o . g e t N o m e ( ) ) ; 5 0 } 5 1 5 2 p u b l i cv o i ds a l v a r ( ) { 5 3 n e wP r o d u t o D a o ( ) . s a l v a r ( p r o d u t o ) ; 5 4 t h i s . a r q u i v o . g r a v a r ( ) ; 5 5 5 6 t h i s . p r o d u t o=n e wP r o d u t o ( ) ; 5 7 t h i s . a r q u i v o=n e wU p l o a d A r q u i v o ( ) ; 5 8 } 5 9 }

Linha 47 - Mtodo que ser chamado pela view para o upload do arquivo. O arquivo ser carregado mas ainda no ser salvo no diretrio. Linha 54 - Quando o usurio pressionar no boto salvar do formulrio, os dados sero persistidos no banco e o arquivo ser gravado no diretrio. ==> Agora vamos fazer a view, no arquivo index implemente o cdigo abaixo:

1 < ? x m lv e r s i o n = ' 1 . 0 'e n c o d i n g = ' U T F 8 '? > 2 < ! D O C T Y P Eh t m lP U B L I C" / / W 3 C / / D T DX H T M L1 . 0T r a n s i t i o n a l / / E N " " h t t p : / / w w w . w 3 . o r g / T R / x h t m l 1 / D T D / x h t m l 1 t r a n s i t i o n a l . d t d " >

3 < h t m lx m l n s = " h t t p : / / w w w . w 3 . o r g / 1 9 9 9 / x h t m l " 4 x m l n s : p = " h t t p : / / p r i m e f a c e s . p r i m e . c o m . t r / u i " 5 x m l n s : h = " h t t p : / / j a v a . s u n . c o m / j s f / h t m l "

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

4/8

30/08/13
7 < h : h e a d > 8 < t i t l e > F i l eU p l o a d < / t i t l e > 9 < / h : h e a d > 1 0 < h : b o d y > 1 1 < h 1 > I n s e r i rP r o d u t o < / h 1 > 1 2 < h : f o r m > 1 3 < h : p a n e l G r i dc o l u m n s = " 2 " >

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


6 x m l n s : f = " h t t p : / / j a v a . s u n . c o m / j s f / c o r e " >

1 4 N o m e :< h : i n p u t T e x tv a l u e = " # { p r o d u t o M B . p r o d u t o . n o m e } " / > 1 5 P r e o :< h : i n p u t T e x tv a l u e = " # { p r o d u t o M B . p r o d u t o . p r e c o } " / > 1 6 1 7 F o t o :< p : f i l e U p l o a di d = " u p l o a d "u p d a t e = " f o t o " 1 8 f i l e U p l o a d L i s t e n e r = " # { p r o d u t o M B . u p l o a d A c t i o n } "a u t o = " t r u e " / > 1 9 2 0 < h : c o m m a n d B u t t o na c t i o n = " # { p r o d u t o M B . s a l v a r } "v a l u e = " S a l v a r "/ > 2 1 < / h : p a n e l G r i d > 2 2 < / h : f o r m > 2 3 2 4 < h 2 > P r o d u t o sC a d a s t r a d o s < / h 2 > 2 5 < h : f o r m > 2 6 < h : d a t a T a b l ev a r = " p r o d u t o "v a l u e = " # { p r o d u t o M B . l i s t a r P r o d u t o s } "> 2 7 < h : c o l u m n > 2 8 < f : f a c e tn a m e = " h e a d e r " > F o t o < / f : f a c e t > 2 9 < h : g r a p h i c I m a g ev a l u e = " . / i m a g e / # { p r o d u t o . f o t o } " / > 3 0 < / h : c o l u m n > 3 1 < h : c o l u m n > 3 2 < f : f a c e tn a m e = " h e a d e r " > N o m e < / f : f a c e t > 3 3 < h : o u t p u t T e x tv a l u e = " # { p r o d u t o . n o m e } " / > 3 4 < / h : c o l u m n > 3 5 < h : c o l u m n > 3 6 < f : f a c e tn a m e = " h e a d e r " > P r e o < / f : f a c e t > 3 7 < h : o u t p u t T e x tv a l u e = " # { p r o d u t o . p r e c o } " / > 3 8 < / h : c o l u m n > 4 0 < / h : d a t a T a b l e > 4 1 < / h : f o r m > 4 2 < / h : b o d y > 4 3 < / h t m l > 4 4

Acesse https://github.com/MaraRegina/FileUpload, visualize o projeto completo ou faa o download para testar.

Postado por Mara Regina s 13:11

+3 Recomende isto no Google

14 comentrios:
@Armando_Piruk 5 de janeiro de 2012 17:14 hahahahaha outro nivel, o tutorial ficou bem mais legal e ta brincando com o layout do blog, #curti Responder

kiko 31 de maro de 2012 20:56 100%, foi de muita ajuda esse tutorial Responder

Douglas 20 de maio de 2012 07:26 Ol, consegui fazer tudo que voc ensinou... t salvando no arquivo e tudo certinho... s que estou tendo problema na hora de apresentar na tela pelo componente primefaces graphicImage... algum sabe pq a imagem no est sendo carregada? Responder Respostas Mara Regina Ol Douglas, 20 de maio de 2012 09:18

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

5/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


Qual o erro que esta sendo exibido, erro de componente utilizado? Se possvel, verifique se o caminho colocado para carregar a imagem corresponde com o caminho do diretrio onde ela foi salva.

Douglas 24 de maio de 2012 09:00 no erro do componente, a imagem s no carregada... e eu coloquei at o endereo esttico pra testar e ela no carregada... a imagem que aparece no lugar uma que no aquele "x" vermelho, no sei explicar direito qual essa imagem. Responder

leonardo teles de almeida 25 de setembro de 2012 12:49 Ol, boa tarde... seria possvel utilizar este tutorial para salvar um arquivo em um banco na rede? Se sim, poderia me dizer onde posso achar alguma informao? Obrigado. Responder Respostas Mara Regina 25 de setembro de 2012 16:23

Sim, no exemplo do tutorial utilizei o conceito de Dao utilizando o hibernate para salvar os dados e imagem no banco. Da uma olhada neste tutorial tem um exemplo de conexo ao banco usando o hibernate. http://meninajava.blogspot.com/2011/11/configurar-o-hibernate-utilizando.html

Mara Regina

25 de setembro de 2012 16:36

Agora que fui me atentar a sua pergunta... se vc deseja salvar o arquivo da imagem no banco em vez de gravar somente o nome no banco e deixar a imagem salva em um diretorio. No tenho nenhum exemplo em mos. Mas vou verificar Responder

Vitor Lopes 5 de novembro de 2012 09:06 Obrigado , Me ajudou bastante Responder

Unknown 15 de novembro de 2012 12:59 oi tudo bem..primeiramente parabens.. estou com um problema na implementaao. log do servidor apache: SEVERE: null java.lang.NullPointerException Hibernate: /* insert br.com.ecommerceetelj.model.Produto */ insert into produto (id_cat, desconto_produto, descricao_produto, imagem_produto, qtd_produtodisponivel_produto, id_produto) values (?, ?, ?, ?, ?, ?, ?, ?) at java.io.FileOutputStream.(FileOutputStream.java:172) OBS: ESSE ERRO DE CIMA CAI EM if (name == null) { throw new NullPointerException(); }

nome_produto,

preco_produto,

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

6/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql


at java.io.FileOutputStream.(FileOutputStream.java:70) OBS: O ERRO DE CIMA CAI EM public FileOutputStream(String name) throws FileNotFoundException { this(name != null ? new File(name) : null, false); } at br.com.ecommerceetelj.bean.UploadArquivo.gravar(UploadArquivo.java:89) at br.com.ecommerceetelj.bean.ProdutoBean.salvar(ProdutoBean.java:41) OBS: O ERRO ACIMA CAI EM QUE ESTA DENTRO DO MEU METODO SALVAR this.arquivo.gravar(); //chama metoda da classe UploadArquivo O ERRO DE NULL POINTER ESTA NA LINHA 83 DO SEU TUTORIAL 83 fos = new FileOutputStream(this.caminho); NO BANCO O MEu PRODUTO SALVA NORMALMENTE , MAIS O CAMPO IMAGEM DO BANCO FICA "Null". DESDE JA AGRADEO!!

Responder

Annimo 20 de novembro de 2012 05:30 Excelente post. Parabns! Responder

Annimo 22 de maro de 2013 10:30 Ol Mara! Gostaria de salvar imagens em uma pasta dentro do container ( Tomcat ) exemplo webapps\documentos\ porque ? bem o sistema poderia ser republicado e perder a pasta de documentos caso estivesse sendo gravado dentro do contexto da aplicao vc saberia me dizer como? H ficou muito bom! Parabens Robson Responder

Thiago Brito 25 de abril de 2013 07:44 Agradeo por compartilhar, deu tudo certo aqui. Obrigado e sucesso. Responder

Carlos Jnior Rodrigues Borges 26 de junho de 2013 11:46 Parabns! Grande iniciativa, continue compartilhando conhecimento. Carlos Jnior. Responder D i g i t es e uc o m e n t r i o . . .

Comentar como: Conta do Google Publicar Visualizar

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

7/8

30/08/13

Menina JAVA: FileUpload com JSF + Primefaces + Hibernate + MySql

Incio
Assinar: Postar comentrios (Atom)

Postagem mais antiga

Modelo Awesome Inc.. Tecnologia do Blogger.

meninajava.blogspot.com.br/2012/01/fileupload-com-jsf-primefaces-hibernate.html

8/8