Bom pessoal estou voltando na ativa com o blog, e vou começar a passar um pouco do meu conhecimento em JAVA, para quem estiver interessado, bom estou atualmente trabalhando com Java EE 6 em aplicações web, utilizo o framework JSF versão 2.0, bem para que não sabe o JSF proporciona um desenvolvimento para web mais simples. “JSF faz sozinho o trabalho braçal que desenvolvedores JSP precisam implementar manualmente, como navegação entre páginas e validação. Você pode pensar nos servlets e no JSP como “a linguagem de montagem” por baixo do framework de alto nível do JSF.[David Geary e Cay Hostmann, livro Core JavaServer Faces, Fundamentos 2º ed. 2007]”, quem quiser pode comprar o livro que citei acima muito bom, ele fala sobre a versão 1.02 do JSF, mas muito útil para o aprendizado e bem didático, bem então vamos ao que interessa, vou demonstrar como montar um projeto e fazer uma aplicação de demonstração, vou utilizar JDK Java 6, IDE NetBeans 6.9.1 que tem suporte nativo ao JSF 2.0, e possui já um servidor para aplicação GlassFish 3.0 que já vem incluído.
1º passo: Abra seu NetBeans e crie um novo projeto Java Web > Aplicação Web.
2º passo: Coloque um nome no seu projeto.
3º passo: escolha o servidor GLASSFISH 3, e a versão do Java EE 6.
4º passo: escolha o Framework JavaServer Faces que é o que vamos trabalhar, as bibliotecas marque a 1º opção “Utilize a biblioteca padrão que vem com o servidor (JSF 2.0)”.
5º passo: na aba Configurações opção Padrão de URL do servlet JSF: mude para qualquer extensão que deseje, (ex: *.teste) assim todas minhas paginas serão da seguinte forma: “minhapagina.teste”. e pronto finalize e temos um projeto JSF 2.0.
Se você mandar executar o projeto já temos um “Hello Facelets” pronto, suponho que seja básico de mais fazer um “Hello World”, vamos progredir e criar um formulário simples, mas antes tenho que explicar um pouco mais sobre o JSF, ele é um framework possui uma arquitetura MVC(Model-View-Controller), Model será nossas classe, View a telas de entrada e saída de dados, e Controller será o Managed Beans, ou seja Bens Gerenciados, onde vai conter nossa lógica de negócio ou programação, com isso seu código fica organizado e de fácil manutenção e outros fatores, exemplo na sua View(tela) não tem código java, somente seus componentes de tela e assim fica fácil para um design trabalhar com o visual, um bom artigo sobre isso é do Rafael Pontes referência em JSF, então vamos lá.
– Crie um pacote models e um controllers, para suas classes e os Managed Beans assim fica melhor visualizar seus arquivos.
– Crie uma classe java chamada Pessoa dentro do pacote models, com os atributos nome, endereço, numero, telefone e cidade.
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.com.teste.models; /** * * @author Thiago */ public class Pessoa { private String nome; private String endereco; private String numero; private String telefone; private String cidade; public String getCidade() { return cidade; } public void setCidade(String cidade) { this.cidade = cidade; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getNumero() { return numero; } public void setNumero(String numero) { this.numero = numero; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } }
– Crie um Bean Gerenciado no pacote controllers, veja como encontrar.
– Escolha a Categoria JavaServer Faces e selecione Bean Gerenciado JSF.
– Vamos dar o nome de PessoaMB, escolha o escopo “View”, em outro momento explico o que seria isso.
– Seu projeto desse estar com essa cara agora, temos o index.xhtml que foi gerado ao criar o projeto, temos nossa classe modelo Pessoa e o controller PessoaMB.
– Abra o index.xhtml e vamos criar nosso formulário:
Código Index.xhtml:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>Cadastro</title> </h:head> <h:body> <h:form> <h:panelGrid columns="3"> <h:outputLabel value="Nome:"/> <h:inputText id="nome" size="20" /> <h:message for="nome" /> <h:outputLabel value="Endereçoo:"/> <h:inputText id="end" size="20" > <h:message for="end" /> <h:outputLabel value="Número:"/> <h:inputText id="nro" size="20" /> <h:message for="nro" /> <h:outputLabel value="Telefone:"/> <h:inputText id="tel" size="20" /> <h:message for="tel" /> <h:outputLabel value="Cidade:"/> <h:inputText id="mun" size="20" /> <h:message for="mun" /> <h:commandButton id="btnE" value="Enviar" /> <h:commandButton id="btnL" value="Limpar"/> </h:panelGrid> </h:form> </h:body> </html>
Resultado não é com visual tão atrativo, em outro momento vamos trabalhar com o visual.
– Abra seu controller PessoaMB, vamos implementar a interface Serializable explico mais para frente o que seria isso, e instancie um objeto pessoa, e uma lista do tipo pessoa para armazenar as pessoas.
Código PessoaMB.java:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package br.com.teste.controllers; import br.com.teste.models.Pessoa; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; /** * * @author Thiago */ @ManagedBean @ViewScoped public class PessoaMB implements Serializable { private Pessoa pessoa = new Pessoa(); private List<Pessoa> pessoaLista = new ArrayList<Pessoa>(); /** Creates a new instance of PessoaMB */ public PessoaMB() { } /**Getters e Setters */ public Pessoa getPessoa() { return pessoa; } public void setPessoa(Pessoa pessoa) { this.pessoa = pessoa; } public List<Pessoa> getPessoaLista() { return pessoaLista; } public void setPessoaLista(List<Pessoa> pessoaLista) { this.pessoaLista = pessoaLista; }
– Na Index.xhtml e vamos adicionar os values nos inputs.
Agora que instanciamos a classe no Bean podemos acessar os atributos através dele.
Ex: inputText id=”teste” value=”#{seuBean.classe.atributo}” />
Código parte Index.xhtml:
<h:panelGrid columns="3"> <h:outputLabel value="Nome:"/> <h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" size="20" /> <h:message for="nome" /> <h:outputLabel value="Endereço:"/> <h:inputText id="end" value="#{pessoaMB.pessoa.endereco}" size="20" > <h:message for="end" /> <h:outputLabel value="Número:"/> <h:inputText id="nro" value="#{pessoaMB.pessoa.numero}" size="20" /> <h:message for="nro" /> <h:outputLabel value="Telefone:"/> <h:inputText id="tel" value="#{pessoaMB.pessoa.telefone}" size="20" /> <h:message for="tel" /> <h:outputLabel value="Cidade:"/> <h:inputText id="mun" value="#{pessoaMB.pessoa.cidade}" size="20" /> <h:message for="mun" /> <h:commandButton id="btnE" value="Enviar" type="submit" action="#{pessoaMB.salvarPessoa}"/> <h:commandButton id="btnL" value="Limpar" type="reset"/> </h:panelGrid>
– No PessoaMB e vamos criar nosso método para salvar essas pessoas.
Logo após os Getters e Setters adicone o método salvar.
/**Métodos */ public void salvarPessoa() { //adicionando pessoas a lista pessoaLista.add(pessoa); //instanciado uma nova para ser cadastrada pessoa = new Pessoa(); }
– Na Index.xhtml e vamos adicionar ação para o botão.
É o mesmo sentido do value, mas nesse caso é uma action=“#{meuBean.meuMetodo}”.
Código parte Index.xhtml:
<h:commandButton id="btnE" value="Enviar" type="submit" action="#{pessoaMB.salvarPessoa}"/>
Não comentei o atributo do commandButton type=”” />
Para envio de formulário utiliza o “submit” que é defaut, e no caso do segundo que é para limpeza usamos o “reset” que tem a função de limpar o formulário.
– Nosso cadastro está pronto, agora vamos apresentar na tela esses dados que inserimos na lista de pessoas, para isso utilizaremos um dataTable, veja como:
Código parte Index.xhtml:
<h:panelGrid> <h:dataTable id="tablePessoa" value="#{pessoaMB.pessoaLista}" var="p" title="Pessoas Cadastradas" border="1" rows="10" > <h:column> <f:facet name="header"> <h:outputText value="NOME" /> </f:facet> <h:outputText value="#{p.nome}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="ENDEREÇO" /> </f:facet> <h:outputText value="#{p.endereco}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="NÚMERO" /> </f:facet> <h:outputText value="#{p.numero}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="TELEFONE" /> </f:facet> <h:outputText value="#{p.telefone}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="CIDADE" /> </f:facet> <h:outputText value="#{p.cidade}"/> </h:column> </h:dataTable> </h:panelGrid>
Veja que no value do dataTable utilizei a lista que criamos no bean, value=”#{pessoaMB.pessoaLista}” e guardei numa variável var=”p” e através dela acesso os atributos específicos que estão armazenados na lista de pessoas.
Está pronto agora podemos visualizar o conteúdo que foi inserido na lista, podemos adicionar uma validação simples só para dar um “UP” no nosso formulário e mostrar a finalidade daquele , e que não é tão complicado em alguns casos validar no JSF.
No inputText /> que quiser que seja um campo obrigatório coloque o atributo required=”true” que torna o campo obrigatório e requiredeMessage=”Campo obrigatório” que é a mensagem que será exibida quando não satisfazer a condição, caso esqueça verá uma mensagem default do JSF. Ex:
Código validando com required:<h:outputLabel value="Nome:"/> <h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" size="20" required="true" requiredMessage="Campo Obrigatório"/> <h:message for="nome" />- Código final do index.xhtml:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>Cadastro</title> </h:head> <h:body> <h:form> <h:panelGrid columns="3"> <h:outputLabel value="Nome:"/> <h:inputText id="nome" value="#{pessoaMB.pessoa.nome}" size="20" required="true" requiredMessage="Campo Obrigatório"/> <h:message for="nome" /> <h:outputLabel value="Endereço:"/> <h:inputText id="end" value="#{pessoaMB.pessoa.endereco}" size="20" required="true" requiredMessage="Campo Obrigatório"/> <h:message for="end" /> <h:outputLabel value="Número:"/> <h:inputText id="nro" value="#{pessoaMB.pessoa.numero}" size="20" /> <h:message for="nro" /> <h:outputLabel value="Telefone:"/> <h:inputText id="tel" value="#{pessoaMB.pessoa.telefone}" size="20" /> <h:message for="tel" /> <h:outputLabel value="Cidade:"/> <h:inputText id="mun" value="#{pessoaMB.pessoa.cidade}" size="20" required="true" requiredMessage="Campo Obrigatório"/> <h:message for="mun" /> <h:commandButton id="btnE" value="Enviar" type="submit" action="#{pessoaMB.salvarPessoa}"/> <h:commandButton id="btnL" value="Limpar" type="reset"/> </h:panelGrid> </h:form> <h:panelGrid> <h:dataTable id="tablePessoa" value="#{pessoaMB.pessoaLista}" var="p" title="Pessoas Cadastradas" border="1" rows="10" > <h:column> <f:facet name="header"> <h:outputText value="NOME" /> </f:facet> <h:outputText value="#{p.nome}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="ENDEREÇO" /> </f:facet> <h:outputText value="#{p.endereco}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="NÚMERO" /> </f:facet> <h:outputText value="#{p.numero}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="TELEFONE" /> </f:facet> <h:outputText value="#{p.telefone}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="CIDADE" /> </f:facet> <h:outputText value="#{p.cidade}"/> </h:column> </h:dataTable> </h:panelGrid> </h:body> </html>Resultado Final:
Para quem quiser pode baixar o projeto baixe aqui, mas aconselho fazer seguindo os passos para aprender, e Qualquer Dúvida me mande, ajudarei sempre que puder, o que eu não souber ajudarei procurar solução,
Peço que qualquer erro meu, me avisem pois é meu 1º post ainda estou aprendendo e vou aperfeiçoando com o tempo, está interessado sobre o que é o JSF realmente veja esse post do meu amigo Fernando muito bom.
Até o próximo, prentendo inserir API do Primefaces que é muito atrativa visualmente.
Rafael Ponte
jan 26, 2011 @ 11:08:14
Excelente post para quem está começando com JSF2.0 e ainda por cima gosta da IDE NetBeans.
Parabéns e continue postando.
Aproveitando, se puder publique seu post na lista de discussão do #javasf. Com certeza teu post ajudará muitos membros do grupo.
Thiago Marques
jan 26, 2011 @ 17:09:11
Valeu, vou continuar postando sim, gosto da Linguagem e estou me dedicando a aprender, ainda mais com alguns incentivos de quem conhece do assunto.. xD
José Henrique Ventura
jan 28, 2011 @ 12:13:32
Aeee muito bom.. viva JSF \O/
Diego Dario
fev 02, 2011 @ 10:50:58
Parabéns e obrigado por compartilhar seu conhecimento Thiago, você cada vez mais se destacando entre os demais. até mais 😉
Késsia
fev 05, 2011 @ 10:48:44
Oi Thiago
Adorei seu post. Reforço os parabéns já citado acima. Conhecimento só é útil quando utilizado e “COMPARTILHADO”. E você está compartilhando de forma excelente! PARABËNS realmente. Sinto orgulho em tê-lo como aluno!!
Ps. Coloquei um link do meu blog para o seu!!
Abraços
Thiago Marques
fev 07, 2011 @ 02:06:17
Obrigado Profa. sempre vou postar aqui para repassar o que sei, e com as dúvidas ajudar e aprender mais.
Rodrigo
fev 05, 2011 @ 13:01:52
Aaaaaa me respeita thiago!!! vc vai xorar na lista do 3º ano? Eu sou do 4ºano e o Altieres que me disse que te fala tudo, que vc vai atraz dele sempre e ele que faz pra vc…isso não é querer aprender né? Ele te explicou o que cada coisa faz mais ele que fez tudo! Vc só sabe “explicar” superficialmente!
Seu babaca! Quer se aparecer com ajuda de outros? E larga de ser chupeta de professor seu bosta!
Afinal, para de colar um pouco nas provas que sempre que passo vejo sua colinha no bolso, acha que engana quem???
Marco
fev 05, 2011 @ 13:19:32
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Thiago Marques
fev 07, 2011 @ 02:13:58
Obrigado Marco. Volte sempre.
Thiago Marques
fev 07, 2011 @ 02:13:32
Rodrigo, infelizmente você está totalmente fora do assunto. Gostaria que revesse seus conceitos. Acho que quem está faltando com o respeito aqui é você, não lhe ofendi de maneira alguma. Caso tenha criticas, sujestões, elogios, fique a vontade para comentar ou até mesmo me procurar na Universidade, são com esses comentários que posso evoluir ainda mais. Thiago.
Fernando Godoy
fev 14, 2011 @ 15:28:18
Muito bem Thiago, Post super fera… Infelizmente existem pessoas que ao invez de incentivar o trabalho que fazemos para AJUDAR as pessoas que estão ao nosso redor, passando um pouco do conhecimento que adquirimos, resolvem simplesmente criticar, Mais TCC está por ai, veremos ai quem sabe e quem não sabe de verdade.
Thiago Marques
fev 14, 2011 @ 18:30:06
Pois é… não me atinge não, só aumentou minha vontade de postar mais. hehehe..
Thiago Castanhari
fev 15, 2011 @ 21:41:30
Parabéns Thiago, excelente iniciativa. Continue Assim.
Thiago Marques
fev 16, 2011 @ 17:01:05
Valeu, a propósito, sua apresentação foi muito boa..
Igor Henrique
fev 16, 2011 @ 17:05:10
Aeeee Tiagão, to conhecendo seu blog agora e mto bom o post cara, um amigo meu me disse uma vez uma coisa que eu gosto sempre de passar adiante e que não é nada mais do que a professora Késsia já disse… “Não seja egoísta, nunca, conhecimento é bom quando compartilhado”, e vc ta fazendo isso direito, apesar do que uns ou outros falam eu sei que vc realmente sabe e é mto bom dividir com aqueles que nao sabem, que ao inves de agradecer preferem criticar…
Abraço e sucesso
Altieres
mar 23, 2011 @ 17:07:45
Muito bom o post, bem detalhado e ainda mais usando a querida IDE Netbeans.
Para quem está iniciando como Developer é o caminho.
Abraço.
Tatiane Meneghello
mar 23, 2011 @ 18:19:12
Thiago …
Parabéns excelente post..
Me ajudou em muito nesse começo de aprender Java para Web!!
continue assim …
Abraços.
Leonardo
maio 30, 2011 @ 19:21:55
O meu da dando erro nas linhas {pessoaMB.pessoa.(endereco, nome, etc)}
quando eu aperto o ponto ele nao indica o que vem dps dele
tipo ele nao ta reconhecendo..
=/
Cadastro Teste
Leonardo
maio 30, 2011 @ 19:30:26
Ja descobri onde voce errou
no Código PessoaMB.java:
o seu esta assim:
private List pessoaLista = new ArrayList
e o certo
private List pessoaLista = new ArrayList
Me corrija se eu estiver errado..
é que deu erro no meu..
flw
Thiago Marques
maio 31, 2011 @ 21:08:57
Leonardo, muito bem observado, foi um equivoco meu mesmo, ao copiar o código para o blog, mas no projeto estava correto, que seria:
private List pessoaLista = new ArrayList();
qualquer dúvida pode postar, em relação ao seu pedido de usar banco de dados, estou criando um com Mysql, mas o wordpress está me bloqueando estou tentando resolver para postar o novo, assim que possivel estarei disponibilizando. obrigado.
Leonardo
jun 10, 2011 @ 19:00:02
Ta bom tiago..
boa sorte
eu estou fazendo uma com o sqlite
mas so dando erro kk
´por isso quero algor de referencia
jtecnico775
dez 21, 2015 @ 00:41:05
Ainda ta dando erro no codigo ta assim: private List pessoaLista = new ArrayList (); como seria então?
jtecnico775
dez 21, 2015 @ 00:43:37
repetindo o codigo estar assim com Pessoa entre tags: private List pessoaLista = new ArrayList ();
leandro
jun 05, 2011 @ 01:56:48
bem legal sua aplicação, para quem tá começando agora nesse momento
programação JSFda para aprender bastante.
Vou mais fundo, quero saber manipular o jsf.
Éder
ago 07, 2011 @ 19:17:59
Parabéns, excelente mesmo eu que não conhecia nada de JSF porém adoro utilizar o netbeans foi excelente, parabéns. Porque é bem difícil achar algo tão didático para iniciantes principalmente para quem utiliza o netbeans.
wasolucoes
maio 22, 2012 @ 16:52:00
Tinha que te parabenizar também pela simplicidade da explicação e pelo bom conteúdo do seu blog!
Estou iniciando com JSF e PrimeFaces e estou aprendendo bastante com você!!!
Muito obrigado!
Thiago Marques
maio 22, 2012 @ 21:40:25
Que bom que gostou, aproveite o conteúdo, abraços
Luciano
jun 17, 2012 @ 20:04:55
Comecei a fazer o exemplo..após pronto estava dando o seguinte erro java.awt.HeadlessException ao executar o comando salvar! Peguei e baixei o seu exemplo, ao colocar para rodar no netbeans reclamou do Junit! Instalei e coloquei para rodar… em seguida o meu também rodou sem nenhum problema! Será que tem haver com esse junit? Para que serve?
Naldo
jun 21, 2012 @ 01:32:15
Thiago meus parabéns pelo post, estou começando a aprender em Java jsf, estou cheio de duvidas, mas um dia eu sei que aprenderei hehehe.
Não estou sabendo como limpar o formulário, o comando reset não está funcionando.
Obrigado pela sua iniciativa.
Thiago Marques
jun 22, 2012 @ 23:56:44
Boa noite Naldo, pode ser que seja problema com o scopo de session que foi utilizado, pois tudo é guardado em uma sessão agora que você finalizou essa etapa, pode dar uma estuda no escopos que o jsf possui, para entender melhor como funciona, procure pelo assunto e se inteire mais!
Logo terá um post mais avançado.
Abraços!
Zilomar
set 10, 2012 @ 17:04:54
Adorei encontrar este post, estou começando agora nessa tecnologia e também com muitas dúvidas, rsrsrs.
Valeu amigo pela iniciativa, mais gente conhecedor desta poderia dar também esse privilégio!
Muito obrigado.
Thiago Marques
set 16, 2012 @ 23:34:49
Obrigado, bons estudos
sandro
set 29, 2012 @ 17:30:35
da onde vem esses dados que preenche essa tabela se nao tem banco de dados nesse projeto?
pedro
out 16, 2012 @ 16:21:45
Ajudou MUITOOOOOOOOOOOOOO , vlw !!
wilker
out 31, 2012 @ 13:31:12
excelente post
Cássio Libraga
dez 28, 2012 @ 04:25:03
Ótima dica, me ajudou muito!
Alaor Resende
jun 10, 2013 @ 14:38:29
Parabéns pelo tutorial, muito bom e ajuda muito quem está começando! Continue assim!
Ademario Junior
out 14, 2013 @ 20:06:08
Rafael, Não consegui configurar a parte do JSF referente ao Escopo…Para mim que utilizo Netbeans 7.3.1 não apareceu View…apenas application, dependent, request, session, flow, conversation.
Qual devo utilizar?
Thiago Marques
out 23, 2013 @ 21:51:10
Qual versão do JSF está utilizando?
segue o link da documentação e versão mínima do recurso.
http://docs.oracle.com/javaee/6/api/javax/faces/bean/ViewScoped.html
Atilia
jun 26, 2015 @ 03:36:54
Olá..Estou fazendo um trabalho no qual eu teria que ter dois logins(usuario e administrativo) e fosse conectado ao postgress.
Saberias me dizer como poderia ser feito?
Daniel
ago 24, 2015 @ 21:41:22
Parabéns me ajudou muito!!
danilio
mar 31, 2016 @ 03:34:05
mEU TA DANDO ERRO NO BOTÃO SALVAR
Francisco Carlos A. deSouza Souza
abr 01, 2016 @ 15:15:26
Parabens Thiago pelo post muito bom ajuda muito no aprendizado.
Thiago
abr 18, 2016 @ 15:08:10
Agradeço o post Thiago, ajudou muito!
Alex Dias Camargo
jun 27, 2019 @ 19:55:58
Amigo, a tag precisa ser fechada em index.xhtml. Obrigado pelas dicas do post! Alex Camargo