Tutorial de Jsf
-
Upload
thayane-santos -
Category
Documents
-
view
221 -
download
0
Transcript of Tutorial de Jsf
-
8/6/2019 Tutorial de Jsf
1/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 1
JavaServer Faces: A mais novatecnologia Java para desenvolvimento WEB
Talita Pitanga
Conhea um pouco sobre a mais nova tecnologia para desenvolvimento de aplicaes WEB:
JavaServer Faces.
Introduo
As tecnologias voltadas para o desenvolvimento de aplicaes WEB tm mudado constantemente.
Como sabemos, inicialmente os sites possuam apenas contedo esttico, ou seja, o contedo de uma
pgina no podia ser modificado em tempo de execuo. Depois, os sites passaram a oferecer pginas
com contedos dinmicos e personalizados. Diversas tecnologias esto envolvidas no desenvolvimento
das aplicaes WEB como, por exemplo, CGI (Common Gateway Interface), Servlets e JSP (Java Server
Pages).
A primeira tecnologia voltada para a construo de pginas dinmicas foi a CGI. Os programas
CGI podem ser escritos em qualquer linguagem de programao. Eles, porm, apresentam problemas de
portabilidade e escalabilidade, alm de mesclarem as regras de negcio com a visualizao. Vale salientar
que um servidor que usa este tipo de tecnologia pode ter seu desempenho comprometido, uma vez que
cada solicitao recebida de uma CGI requer a criao de um novo processo.
Em seguida vieram os servlets. Similarmente s CGIs, servlets so pequenos programas feitos
em Java que encapsulam alguma funcionalidade inerente sua aplicao WEB. Diferentemente das CGIs,
servlets so objetos Java que no precisam ser executados em outro processo: o processamento executado dentro de uma thread do processo do servidor. No entanto, eles ainda no resolvem o
problema da separao das regras de negcio da visualizao, dificultando a manuteno.
Posteriormente surgiram as pginas JSP. Elas so facilmente codificadas e produzem contedos
reutilizveis. Assim como os servlets, as JSPs tambm no resolvem o problema da manuteno das
aplicaes.
Esse problema s foi resolvido quando comeou a se aplicar os design patterns no
desenvolvimento das pginas. No caso das tecnologias para desenvolvimento WEB usando Java, o designpattern utilizado o MVC (Model-View-Controller). Se voc no sabe o que MVC, fique tranqilo!!
Falaremos um pouco sobre esse padro mais adiante. Mas voc pode encontrar algo sobre esse pattern
bem aqui pertinho: http://www.guj.com.br/forum/viewtopic.php?t=7228&highlight=mvc.
Com a grande utilizao dos patterns, principalmente no mundo Java, comearam a surgir
diversos frameworks para auxiliar no desenvolvimento de aplicaes WEB. Posso apostar que a maioria
de vocs j ouviu falar em Struts ou WebWork.
Finalmente chegamos ao assunto que se prope esse artigo. Se voc for como eu, j deve terfeito a seguinte pergunta para si mesmo: Beleza... mas e da? Afinal, o que JavaServer Faces?
-
8/6/2019 Tutorial de Jsf
2/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 2
O que JavaServer Faces?
JSF uma tecnologia que incorpora caractersticas de um framework MVC para WEB e de um
modelo de interfaces grficas baseado em eventos. Por basear-se no padro de projeto MVC, uma de
suas melhores vantagens a clara separao entre a visualizao e regras de negcio (modelo).
A idia do padro MVC dividir uma aplicao em trs camadas: modelo, visualizao e controle.
O modelo responsvel por representar os objetos de negcio, manter o estado da aplicao e fornecer
ao controlador o acesso aos dados. A visualizao representa a interface com o usurio, sendo
responsvel por definir a forma como os dados sero apresentados e encaminhar as aes dos usurios
para o controlador. J a camada de controle responsvel por fazer a ligao entre o modelo e a
visualizao, alm de interpretar as aes do usurio e as traduzir para uma operao sobre o modelo,
onde so realizadas mudanas e, ento, gerar uma visualizao apropriada.
O Padro MVC segundo JSF
No JSF, o controle composto por um servlet denominado FacesServlet, por arquivos de
configurao e por um conjunto de manipuladores de aes e observadores de eventos. O FacesServlet
responsvel por receber requisies da WEB, redirecion-las para o modelo e ento remeter uma
resposta. Os arquivos de configurao so responsveis por realizar associaes e mapeamentos de
aes e pela definio de regras de navegao. Os manipuladores de eventos so responsveis por
receber os dados vindos da camada de visualizao, acessar o modelo, e ento devolver o resultado para
o FacesServlet.
O modelo representa os objetos de negcio e executa uma lgica de negcio ao receber os dados
vindos da camada de visualizao. Finalmente, a visualizao composta por component trees
(hierarquia de componentes UI), tornando possvel unir um componente ao outro para formar interfaces
mais complexas. A Figura 1 mostra a arquitetura do JavaServer Faces baseada no modelo MVC.
Figura 1 - Arquitetura JSF baseada no modelo MVC
-
8/6/2019 Tutorial de Jsf
3/11
-
8/6/2019 Tutorial de Jsf
4/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 4
Vamos agora ao nosso exemplo.
Implementando um exemplo em JSF
Ser uma aplicao bem simples para demonstrar o uso dessa nova tecnologia. O nosso exemplo
consiste de uma pgina inicial contendo 2 links: um para a insero de dados e outro para a busca.
A pgina de insero consiste de um formulrio onde o usurio entrar com o nome, endereo,
cidade e telefone. Os dados sero guardados em um banco de dados (no meu caso, eu uso o
PostgreSQL) para uma posterior consulta. Se o nome a ser inserido j existir no banco de dados, uma
mensagem ser exibida informando ao usurio que o nome j est cadastrado (no nosso exemplo, o
nome a chave primria da tabela). Caso contrrio, uma mensagem de sucesso ser exibida ao usurio.
A busca se dar pelo nome da pessoa. Se o nome a ser buscado estiver cadastrado no banco,
ento uma pgina com os dados relativos ao nome buscado sero exibidos. Caso contrrio, serinformado ao usurio que o nome buscado no existe no banco.
Para a criao da tabela da base de dados foi utilizado o script apresentado abaixo.
CREATE TABLE pessoa
(
nome varchar(30) NOT NULL,
endereco varchar(50),
cidade varchar(20),
telefone varchar(10),
PRIMARY KEY (nome)
);
Vamos utilizar a IDE eclipse (http://www.eclipse.org/) para o desenvolvimento deste exemplo
devido existncia de um plugin para JSF (http://www.exadel.com/products_jsfstudio.htm), tornando o
desenvolvimento mais fcil.
No eclipse, escolha a opo New Project do menu File. Depois, escolha JSF Project. Nomeie seu
projeto como exemplo-jsf. Com o seu projeto criado, v at o diretrio WebContent. As pginas JSP
devem ficar armazenadas nesse diretrio.
O cdigo da pgina index.jsp ficar como mostrado abaixo.
Exemplo JSF
Agenda
-
8/6/2019 Tutorial de Jsf
5/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 5
Inserir
Buscar
Algumas tags aqui merecem ser comentadas:
gera um formulrio. cria um link para a pgina definida pelo campo value. O texto que
compe o link colocado utilizando-se a tag .
O usurio ter a opo de buscar ou inserir dados. Os cdigos das pginas de busca e insero
so mostrados a seguir, respectivamente.
buscar.jsp
Busca
Digite o nome:
voltar
inserir.jsp
Insero
Entre com os dados abaixo
Nome:
Endereo:
-
8/6/2019 Tutorial de Jsf
6/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 6
Cidade:
Telefone:
voltar
A tag cria uma caixa de texto onde o valor digitado guardado em value. Paracriar um boto, utilizada a tag . O label do boto colocado em value. Action
determina qual a ao que o boto deve tomar. Na pgina buscar.jsp, ao clicar no boto OK, o mtodo
buscar() da classe AgendaDB chamado.
O cdigo da classe bean AgendaDB com os mtodos getters e setters das variveis nome,
endereo, cidade e telefone e com os mtodos inserir e buscar ficar conforme mostrado abaixo. nesse
arquivo onde a conexo com o banco feita. Nas aplicaes JSF, os beans so usados para que dados
possam ser acessados atravs de uma pgina. O cdigo java referente a essa classe deve estar localizado
no diretrio JavaSource. J que estamos utilizando um Java bean, um managed-bean dever ser criadono arquivo faces-config.xml que est presente no diretrio WEB-INF.
import java.sql.*;
public class AgendaDB {
private String nome = blank;
private String endereco = blank;
private String cidade = blank;
private String telefone = blank;
private String result_busca = blank;
private String result_inserir = blank;
public static final String BUSCA_INVALIDA = "failure";public static final String BUSCA_VALIDA = "success";
public static final String SUCESSO_INSERCAO = "success";
public static final String FALHA_INSERCAO = "failure";
static Connection con = null;
static Statement stm = null;
static ResultSet rs;
static private String blank = "";
public AgendaDB() {
if (con==null) {
try {
Class.forName("org.postgresql.Driver");
con =
DriverManager.getConnection("jdbc:postgresql://localhost:5432/talita","talita","tata");
} catch (SQLException e) {
System.err.println ("Erro: "+e);con = null;
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFound...");
-
8/6/2019 Tutorial de Jsf
7/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 7
e.printStackTrace();
}
}
}
public String getNome() {
return nome;
}
public void setNome(String nome) {this.nome = nome;
}
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 getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String inserir() {
String result_inserir = FALHA_INSERCAO;
try {
stm = con.createStatement();
stm.execute("INSERT INTO pessoa(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
endereco + "','" + cidade + "','"+ telefone + "')");stm.close();
result_inserir = SUCESSO_INSERCAO;
} catch (SQLException e) {
System.err.println ("Erro: "+e);
result_inserir = FALHA_INSERCAO;
}
return result_inserir;
}
public String buscar() throws SQLException {
String result_busca = BUSCA_INVALIDA;
try {
stm = con.createStatement();
rs = stm.executeQuery("SELECT * FROM pessoa WHERE nome = '" + nome + "'");
if (rs.next()) {nome = rs.getString(1);
endereco = rs.getString(2);
cidade = rs.getString(3);
telefone = rs.getString(4);
result_busca = BUSCA_VALIDA;
}
else
result_busca = BUSCA_INVALIDA;
rs.close();
stm.close();
} catch (SQLException e) {
System.err.println ("Erro: "+e);
}
return result_busca;
}
}
Ainda existiro mais 4 pginas JSP em nosso exemplo:
-
8/6/2019 Tutorial de Jsf
8/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 8
sucesso_busca.jsp: esta pgina informa ao usurio quea busca foi bem sucedida, apresentando os dados referentes ao nome procurado;
Resultado da Busca
Nome:
Endereo:
Cidade:
Telefone:
voltar
falha_busca.jsp: esta pgina informa ao usurio que o nome buscado no existe nobanco de dados;
no foi encontrado(a)!
voltar
sucesso_insercao.jsp: informa que os dados foram inseridos com sucesso no banco;
-
8/6/2019 Tutorial de Jsf
9/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 9
Dados Inseridos com Sucesso!
voltar
falha_insercao.jsp: informa que os dados no foram inseridos porque j existe nobanco um nome igual ao que est se tentando inserir.
j est cadastrado!Entre com outro nome!
voltar
Arquivos de configurao
Finalmente faltam os arquivos de configurao faces-config.xml e web.xml. No arquivo faces-
config.xml ns vamos definir as regras de navegao e o managed-bean relativo nossa classe
AgendaDB. O cdigo est mostrado logo abaixo.
/buscar.jsp
success
/sucesso_busca.jsp
failure
/falha_busca.jsp
/inserir.jsp
success/sucesso_insercao.jsp
failure
-
8/6/2019 Tutorial de Jsf
10/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 10
/falha_insercao.jsp
agenda
AgendaDB
session
O primeiro bloco contm uma regra de navegao para a pgina buscar.jsp. Caso o mtodo
buscar() da classe AgendaDB retorne success, ento a pgina chamada ser sucesso_busca.jsp. Caso a
palavra retornada pelo mtodo seja failure, ento a pgina a ser exibida dever ser falha_busca.jsp. O
segundo bloco contm a mesma regra do primeiro, sendo que para a pgina inserir.jsp.
O terceiro bloco refere-se ao managed-bean. No parmetro class, deve ser indicado o nome da
classe Java bean. O nome fica a critrio do desenvolvedor, podendo at mesmo ser o mesmo da classe.
O cdigo do arquivo web.xml pode ser visto abaixo.
javax.faces.STATE_SAVING_METHOD
client
javax.faces.CONFIG_FILES
/WEB-INF/faces-config.xml
com.sun.faces.config.ConfigureListener
Faces Servlet
javax.faces.webapp.FacesServlet
1
Faces Servlet*.jsf
A linha *.jsf presente no ltimo bloco desse arquivo, indica que as
pginas tero a extenso jsf. Por esse motivo que qualquer chamada de uma pgina dentro de outra a
extenso no jsp e sim jsf. Existem outras opes de configurao. Mas que no esto no escopo desse
artigo.
-
8/6/2019 Tutorial de Jsf
11/11
Grupo de Usurios Javahttp://www.guj.com.br
Grupo de Usurios Java http://www.guj.com.br Pgina 11
Dentro do diretrio lib ficam armazenados os arquivos .jar. Como o nosso exemplo acessa um
banco de dados, devemos adicionar a esse diretrio o driver relativo verso do banco que se est
utilizando. Para esse exemplo eu utilizei a verso 8.0 do PostgreSQL (http://www.postgresql.org). Voc
pode obter o driver em http://jdbc.postgresql.org/download.html.
Rodando o exemplo
Com todas as pginas, classe Java e arquivos de configurao criados, podemos finalmente rodar
a nossa aplicao. Podemos fazer isso de duas maneiras. Primeiro, voc pode utilizar as opes que o
Eclipse oferece. Clique com o boto direito em cima do diretrio exemplo-jsf. Em JSF Studio escolha
Register Web Context in Tomcat. Em seguida, inicialize o servidor. Abra o browser e digite
http://localhost:8080/exemplo-jsf/index.jsf.
Voc pode, ao invs de registrar a sua aplicao no Tomcat, gerar o arquivo WAR. Para isso, v
at o diretrio WebContent da sua aplicao e ento digitejar cvf exemplo-jsf .
Em seguida, copie o arquivo WAR para o diretrio webapps do Tomcat. Inicialize o servidor, abra
o browser e digite o mesmo endereo j dito anteriormente.
Concluso
JavaServer Faces uma tecnologia bastante recente para o desenvolvimento de aplicaes WEB
e pouco tem se visto ainda sobre essa tecnologia. Como j mencionado, esse artigo fornece apenas uma
simples introduo sobre o assunto. Existe muito mais a ser dito a respeito dessa tecnologia.
O exemplo aqui mostrado faz uso de pouqussimos recursos oferecidos pelo JSF. Lembre-se que oJSF faz uso do tratamento de eventos (que no foi demonstrado nesse exemplo). Mas acredito queoutros artigos viro e, quem sabe nos prximos poderemos tratar mais a fundo essa tecnologia
Talita Pitanga ([email protected]) estudante do curso de Engenharia de Computao da Universidade Federal doRio Grande do Norte UFRN.