Escolar Documentos
Profissional Documentos
Cultura Documentos
A requisio enviada por um cliente deve conter, basicamente, um comando (tambm chamado de
mtodo), o endereo de um recurso no servidor (tambm chamado de path) e uma informao sobre a
verso do protocolo HTTP sendo utilizado. Supondo, por exemplo, que queremos buscar o contedo do
endereo http://www.uol.com.br/index.html. Utilizemos o mtodo GET, o path /index.html e a verso 1.1
do protocolo HTTP. Temos a seguinte requisio enviada:
JavaServer Faces a tecnologia do momento, requisitada na maioria das oportunidades de emprego para
desenvolvedores Java. JSF, assim como os outros frameworks web, foram baseados em Servlets.
1.4. Containers
Containers so interfaces entre componentes e funcionalidades de baixo nvel especficas de uma
plataforma. Para uma aplicao web desenvolvida em Java ou um componente corporativo ser executado,
eles precisam ser implantados em um container.
Os containers tambm so chamados de servidores de objetos, ou servidores de aplicao, pois
oferecem servios de infra-estrutura para execuo de componentes. O EJB Container suporta Enterprise
JavaBeans (EJB), que so componentes corporativos distribudos. Os Servlets, JSP, pginas JSF e arquivos
estticos (HTML, CSS, imagens e etc) necessitam de um Web Container para ser executado.
Existem diversas organizaes que desenvolvem containers Java EE, por exemplo: Oracle, IBM, Red
Hat, Apache, etc. Apesar de tantas ofertas gratuitas, algumas empresas ainda vendem licenas de seus
prprios servidores, pois oferecem suporte diferenciado ao cliente e normalmente implementam
funcionalidades que os servidores gratuitos talvez no possuam.
Para testar nossos exemplos, usaremos o Wildfly 10.0, pois leve, gratuito e muito popular.
Como estes servidores so baseados nas especificaes da tecnologia Java EE, teoricamente, voc
pode implantar os exemplos que desenvolveremos neste livro em qualquer container compatvel com a
Java EE.
EXERCCIO 01
1)
2)
3)
Um Analista de Controle Externo da rea de TI do TCM/GO est trabalhando em uma aplicao web
utilizando a plataforma Java EE. Ciente que os componentes desta aplicao, para serem processados no
servidor de aplicaes, tero que ser implantados (deployed) em contineres apropriados, ele esclareceu
equipe de desenvolvimento que servlets, JavaServer Pages, pginas HTML e Java Beans sero implantados
e processados no continer A. Alm disso, alguns componentes sero implantados e processados no
continer B, destinado a prover a infraestrutura necessria para a execuo de componentes de negcio
distribudos que estendem as funcionalidades de um servidor, permitindo encapsular lgica de negcio e
dados especficos de uma aplicao.
Os contineres A e B so conhecidos, respectivamente, como
a) local container e remote container.
b) web container e EJB container.
c) glassfish container e tomcat container.
d) EJB container e web container.
e) server container e client container.
4)
Ano: 2014 Banca: Quadrix rgo: DATAPREV Prova: Analista Tecnologia da Informao
Para o caso de um desenvolvedor precisar implementar seu prprio controlador de base de dados,
usando a JPA, qual seria a tecnologia de Java EE mais interessante para se implementar esse servio?
a) Implementar a JPA dentro de um Web Service.
b) Implementar a JPA dentro de um JAX-RPC.
c) Implementar a JPA dentro de um Servlet.
Ano: 2014 Banca: CESPE rgo: TJ-SE Prova: Analista Judicirio - Anlise de Sistemas
Essa comparao feita em todo o tempo que se est desenvolvendo usando algum mecanismo de
ORM. O mapeamento feito usando metadados que descrevem a relao entre objetos e banco de dados.
Uma soluo ORM consiste de uma API para executar operaes CRUD simples em objetos de classes
persistentes, uma linguagem ou API para especificar queries que se referem a classes e propriedades de
classes, facilidades para especificar metadados de mapeamento e tcnicas para interagir com objetos
transacionais para identificarem automaticamente alteraes realizadas, carregamento de associaes por
demanda e outras funes de otimizao.
value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
O nome da unidade de persistncia foi definido como FinanceiroPU. Precisaremos desse nome daqui
a pouco, quando formos colocar tudo para funcionar. O provider diz qual a implementao que ser
usada como provedor de persistncia.
Existem vrias opes de configurao que podem ser informadas neste arquivo XML. Vejamos as
principais propriedades que usamos em nosso arquivo de configurao:
javax.persistence.jdbc.url: descrio da URL de conexo com o banco de dados.
javax.persistence.jdbc.driver: nome completo da classe do driver JDBC.
javax.persistence.jdbc.user: nome do usurio do banco de dados.
javax.persistence.jdbc.password: senha do usurio do banco de dados.
hibernate.dialect: dialeto a ser usado na construo de comandos SQL.
hibernate.show_sql: informa se os comandos SQL devem ser exibidos na console (importante para
debug, mas deve ser desabilitado em ambiente de produo).
hibernate.format_sql: indica se os comandos SQL exibidos na console devem ser formatados
(facilita a compreenso, mas pode gerar textos longos na sada).
hibernate.hbm2ddl.auto: cria ou atualiza automaticamente a estrutura das tabelas no banco de
dados.
EXERCCIO 03
1)
Criando um Domain Model com o uso de ORM a partir do DER abaixo implementado no
Postgresql que representa um simples Sistema de Processamento de Vendas, faa as modificaes
necessrias.
2)
Ano: 2014 Banca: FCC rgo: TRT - 16 REGIO (MA) Prova: Tcnico Judicirio - Tecnologia
da Informao
Na arquitetura Java EE, muito trabalho que poderia ser feito pelo programador feito por um
middleware denominado container. Os tipos principais de container que existem e executam em um
servidor de aplicaes Java EE completo so:
a) Web container e EJB container.
b) Cloud container e Web container.
c) EJB container e JPA container.
d) JUnit container e HTTP container.
e) IIS container
e JSP container.
INTRODUO AO JSF
3.1. O que JavaServer Faces?
JavaServer Faces, tambm conhecido como JSF, uma tecnologia para desenvolvimento web que
utiliza um modelo de interfaces grficas baseado em eventos. Esta tecnologia foi definida pelo JCP (Java
Community Process), o que a torna um padro de desenvolvimento e facilita o trabalho dos fornecedores
de ferramentas, ao criarem produtos que valorizem a produtividade no desenvolvimento de interfaces
visuais.
JSF baseado no padro de projeto MVC (Model View Controller), o que torna o desenvolvimento de
sistemas menos complicado. O padro MVC separa o sistema em trs responsabilidades (modelo,
visualizao e controle), onde o modelo responsvel por representar os objetos de negcio, manter o
estado da aplicao e fornecer ao controlador o acesso aos dados. A visualizao responsvel pela
interface do usurio.
Ela que define a forma como os dados so apresentados e encaminha as aes do usurio para o
controlador. O controlador responsvel por ligar o modelo e a visualizao, interpretando as solicitaes
do usurio, traduzindo para uma operao no modelo (onde so realizadas efetivamente as mudanas no
sistema) e retornando a visualizao adequada solicitao.
Em JSF, o controle feito atravs de uma servlet chamada Faces Servlet, opcionalmente, por
arquivos XML de configurao e por vrios manipuladores de aes e observadores de eventos. A Faces
Servlet recebe as requisies dos usurios na web, redireciona para o modelo e envia uma resposta.
O modelo representado por objetos de negcio, que executa uma lgica de negcio ao receber
dados oriundos da camada de visualizao. A visualizao composta por uma hierarquia de componentes
(component tree), o que torna possvel unir componentes para construir interfaces mais ricas e complexas.
Existem vrios componentes JSF, desde os mais simples, como um Output Label, que apresenta
simplesmente um texto, ou um Data Table, que representa dados tabulares de uma coleo que pode vir
do banco de dados.
A API de JSF suporta a extenso e criao de novos componentes, que podem fornecer
funcionalidades adicionais. Os principais componentes que a implementao de referncia do JSF fornece
so: formulrio, campos de entrada de texto e senhas, rtulos, links, botes, mensagens, painis, tabela de
dados, etc.
3.3. Bibliotecas de componentes de terceiros
Atualmente, existem diversas organizaes que trabalham na criao de componentes
personalizados, como exemplo, podemos citar a Oracle (ADF Faces Rich Client), IceSoft (IceFaces), Red Hat
(RichFaces), Prime Technology (PrimeFaces) e etc.
As bibliotecas de componentes terceiras incluem muitos componentes interessantes, como tabelas
de dados avanadas, menus suspensos, botes, barras de progresso, dilogos, componentes para captura
de datas e cores, etc.
Usaremos PrimeFaces no projeto deste livro, mas antes, usaremos apenas os componentes bsicos
do JSF.
3.4. Escolhendo uma implementao de JSF
A JSF foi criada atravs do Java Community Process (JCP), que uma entidade formada pelas mais
importantes empresas de tecnologia do mundo e especialistas em diversos assuntos.
O JCP composto por vrios grupos de trabalho, que so chamados de JSR (Java Specification
Request). Uma JSR um projeto de uma nova tecnologia. O artefato produzido atravs das JSRs so
documentaes, interfaces e algumas classes que especificam como deve funcionar um novo produto.
A JSF foi criada e controlada pelo JCP atravs de JSRs. Quando uma JSR finalizada, empresas
fornecedoras de tecnologia tm a chance de entender a especificao e implementar um produto final
compatvel com o proposto pela especificao.
No caso da JSF, a implementao mais conhecida atualmente a Mojarra, que pode ser obtida em
https://javaserverfaces.java.net/.
3.5. Adicionando JSF ao projeto Maven
Como estamos usando o Maven, no precisaremos baixar a implememtao de JSF manualmente.
Podemos apenas adicionar a dependncia no POM do projeto.
<!-- Mojarra (implementacao do JSF) -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.13</version>
<scope>compile</scope>
</dependency>
Usaremos o JSF 2.2, lanado dentro da Java EE 7.
Adicionaremos o Project Facet JavaServer Faces com a verso 2.2 para o Eclipse nos auxiliar melhor
durante o desenvolvimento.
3.6. Managed bean
Antigamente, alguns programadores desenvolviam todo o comportamento de uma pgina no prprio
arquivo de layout, na verdade, infelizmente, ainda existem programadores que fazem isso.
Em JSF, no conseguimos fazer isso. O arquivo que inclui os componentes da pgina deve ficar
separado da classe que gerencia o comportamento dela, chamada de managed bean.
Os managed beans nada mais so que Java Beans, que servem como canais entre a interface grfica
(a pgina) e o back-end da aplicao (regras de negcio, acesso ao banco de dados, etc).
Os beans gerenciados do JSF podem receber dados digitados pelos usurios atravs de alguma
pgina, processar mtodos atravs de aes dos usurios e fornecer dados para apresentao na pgina.
Para um bean ser reconhecido como um managed bean JSF, precisamos registr-lo. A maneira mais
fcil de fazer isso atravs da anotao @ManagedBean, do pacote javax.faces.bean. Por padro, todas as
classes do projeto sero escaneadas para encontrar beans anotados.
Nosso primeiro exemplo ser o managed bean OlaBean. Os atributos nome e sobrenome sero
informados pelo usurios, por isso, possuem os getters e setters correspondentes. O atributo
nomeCompleto ser montado pelo mtodo dizerOla e apresentado na pgina, portanto, no precisamos
do setter para esse atributo. O mtodo dizerOla ser chamado a partir de um boto da pgina.
@javax.faces.bean.ManagedBean
public class OlaBean {
private String nome;
private String sobrenome;
private String nomeCompleto;
public void dizerOla() {
this.nomeCompleto = this.nome.toUpperCase()
+ " " + this.sobrenome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String getNomeCompleto() {
return nomeCompleto;
}
}
3.7. Criando uma pgina XHTML
Vamos criar uma pgina simples em JSF, que por enquanto, no far ligao com o managed bean
que programamos.
Criaremos um arquivo chamado Ola.xhtml, clicando com o boto direito no projeto e acessando
New, HTML File. Na tela New HTML File, digite o nome do arquivo e clique em Finish. O arquivo ser
criado no diretrio src/main/webapp do projeto.
Deixaremos o cdigo-fonte do arquivo Ola.xhtml como a seguir:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Ol JSF</title>
</h:head>
<h:body>
<h:form>
<h1>Ol</h1>
Nome: <h:inputText />
<br/>
Sobrenome: <h:inputText />
<br/>
<h:commandButton value="Dizer ol" />
</h:form>
</h:body>
</html>
A declarao DOCTYPE foi usada para dizer aos browsers dos usurios a verso do HTML que estamos
usando, para que eles possam exibir os elementos de forma adequada. Em nosso exemplo, declaramos
que o HTML 5.
<!DOCTYPE html>
Importamos a biblioteca de componentes HTML atravs do namespace http://xmlns.jcp.org/jsf/html.
A letra h o prefixo usado para acessar os componentes dessa biblioteca.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
As tags <h:head> e <h:body> so importantes para o funcionamento da pgina JSF, para definir o
cabealho e corpo da pgina.
<h:head>
<title>Ol JSF</title>
</h:head>
<h:body>
...
</h:body>
No corpo da pgina, usamos um componente de formulrio, representado pela tag <h:form>, dois
componentes de entrada de texto, representados pela tag <h:inputText> e um boto, com
<h:commandButton>.
<h:form>
<h1>Ol</h1>
Nome: <h:inputText />
<br/>
Sobrenome: <h:inputText />
<br/>
<h:commandButton value="Dizer ol" />
</h:form>
Considerando que esse exemplo esteja no projeto "Financeiro", podemos acessar a pgina que
criamos pela URL http://localhost:8080/Ola.xhtml.
A implementao do JSF gerou o cdigo-fonte HTML a partir dos componentes que adicionados
pgina XHTML.
3.8. Ligando valores e aes com EL
Depois que o managed bean registrado, ele pode ser acessado pelos componentes das pginas do
projeto. A maioria dos componentes JSF possui propriedades que nos permitem especificar um valor ou
uma ligao de valor que est associado a um bean. Por exemplo, podemos especificar um valor esttico
no componente InputText:
<h:inputText value="Ol mundo!" />
Expression Language (EL) torna possvel o acesso rpido a managed beans. O avaliador de expresses
responsvel por tratar expresses EL que esto entre os caracteres #{}. No exemplo abaixo, ligamos o
valor do componente InputText propriedade nome do managed bean OlaBean, atravs do getter e setter.
<h:inputText value="#{olaBean.nome}" />
Quando o componente for renderizado, o mtodo getNome ser invocado. J o mtodo setNome
ser chamado quando o usurio digitar algo no componente de entrada de texto e submeter o formulrio.
O nome olaBean (com inicial em minsculo) definido por padro, de acordo com o nome da classe
do managed bean, quando no especificamos um outro nome.
@ManagedBean
public class OlaBean {
}
Poderamos definir um nome diferente atribuindo name da anotao @ManagedBean.
@ManagedBean(name = "ola")
public class OlaBean {
}
Agora, associaremos os valores e/ou aes dos componentes s propriedades e mtodos de
OlaBean.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Ol JSF</title>
</h:head>
<h:body>
<h:form>
<h1>Ol #{ola.nomeCompleto}</h1>
Nome: <h:inputText value="#{ola.nome}" />
<br/>
Sobrenome: <h:inputText value="#{ola.sobrenome}" />
<br/>
<h:commandButton value="Dizer ol"
action="#{ola.dizerOla}" />
</h:form>
</h:body>
</html>
Quando o boto "Dizer ol" for acionado, o framework chamar o mtodo dizerOla do managed
bean, que passar o nome para maisculo, concatenar com o sobrenome e atribuir varivel
nomeCompleto, que acessada pela pgina atravs do getter, para dizer "Ol NOME sobrenome".
Os escopos de managed beans JSF podem ser definidos atravs de anotaes do pacote
javax.faces.bean. Os principais so:
@NoneScoped: o bean ser instanciado a cada vez que for referenciado.
@RequestScoped (padro): tem vida curta, comeando quando referenciado em uma nica
requisio HTTP e terminando quando a resposta enviada de volta ao cliente.
@ViewScoped: a instncia permanece ativa at que o usurio navegue para uma prxima pgina.
@SessionScoped: mantm a instncia durante diversas requisies e at mesmo navegaes entre
pginas, at que a sesso do usurio seja invalidada ou o tempo limite atingido. Cada usurio possui sua
sesso de navegao, portanto, os objetos no so compartilhados entre os usurios.
@ApplicationScoped: mantm a instncia durante todo o tempo de execuo da aplicao. um
escopo que compartilha os objetos para todos os usurios do sistema.
Para exemplificar o funcionamento de alguns escopos, criaremos uma pgina com uma lista de
nomes, com um campo e um boto para adicionar novos nomes.
@ManagedBean
@SessionScoped
public class NomesBean {
...
}
Se usarmos este escopo, podemos adicionar diversos nomes, navegar em outras pginas e voltar
para a listagem de nomes, que eles ainda estaro l. O managed bean ser perdido apenas quando o
tempo limite da sesso for alcanado ou se o usurio solicitar a invalidao da sesso (geralmente, atravs
de logout do sistema).
O escopo de aplicao compartilha a instncia do managed bean com todos os usurios.
@ManagedBean
@ApplicationScoped
public class NomesBean {
...
}
Se adicionarmos alguns nomes e acessarmos a pgina de outro navegador ou at mesmo de outro
computador, os mesmos nomes aparecero, mostrando que realmente este escopo compartilha os dados.
3.10. Backing bean
Quando voc digita o endereo da aplicao no browser e acessa uma pgina do sistema, o
framework JSF l e processa o arquivo XHTML. Esse arquivo contm tags de componentes, como
formulrios, campos de entrada de textos, botes e etc.
JSF fornece um conjunto de classes que representam os componentes. Essas classes so instanciadas
de acordo com as tags adicionadas na pgina XHTML e constroem uma hierarquia de componentes, que
representam os elementos da pgina e seus relacionamentos.
Por exemplo, a classe HtmlForm representa o componente de formulrio, HtmlInputText representa
o componente de entrada de texto e HtmlCommandButton o boto.
Durante o processamento da pgina, um cdigo HTML gerado (renderizado) e enviado para o
navegador do usurio. Cada componente JSF possui um renderizador que responsvel por gerar cdigo
HTML, refletindo o estado de seu componente.
Em algumas ocasies, seu bean pode precisar ter acesso s instncias dos componentes da pgina.
Este acesso d possibilidade de inspecionar e at modificar propriedades do componente que est sendo
renderizado para o usurio. Por exemplo, um componente de entrada de texto <h:inputText/>,
representado como objeto Java do tipo HtmlInputText, pode ter a propriedade disabled modificada em
tempo de execuo pelo cdigo Java, atravs do acesso direto a este objeto.
Para fazer esta ligao entre os componentes da pgina e propriedades de beans, precisamos criar
um backing bean. Um bean deste tipo igual ao managed bean, a nica diferena que ele, alm de fazer
ligaes de valores, pode fazer tambm ligaes de componentes.
Para um bean ser caracterizado como um backing bean, no cdigo-fonte da pgina feita uma
amarrao (binding) em uma tag de um componente JSF para uma propriedade de um managed bean.
No backing bean NomesBean, criamos os atributos que recebero instncias dos componentes:
@ManagedBean
@ViewScoped
public class NomesBean { private String nome;
private List<String> nomes = new ArrayList<>();
private HtmlInputText inputNome;
private HtmlCommandButton botaoAdicionar;
public void adicionar() {
this.nomes.add(nome);
// desativa campo e boto quando mais que 3 nomes
// forem adicionados
if (this.nomes.size() > 3) {
this.inputNome.setDisabled(true);
this.botaoAdicionar.setDisabled(true);
this.botaoAdicionar.setValue("Muitos nomes adicionados...");
}
}
// getters e setters
}
Para conectar os componentes do formulrio com as propriedades criadas, usamos o o atributo
binding das tags dos componentes.
Nome: <h:inputText value="#{nomesBean.nome}"
binding="#{nomesBean.inputNome}" />
<br/>
<h:commandButton value="Adicionar" action="#{nomesBean.adicionar}"
binding="#{nomesBean.botaoAdicionar}" />
Podemos acessar a pgina normalmente e adicionar at 4 nomes. A partir da, o campo e boto so
desabilitados e o texto do boto tambm modificado.
Apesar de poderoso, este recurso deve ser usado com bastante cuidado. O uso excessivo pode deixar
o cdigo-fonte grande e difcil de entender. Na maioria das vezes, conseguimos fazer o que precisamos
usando apenas expresses de ligao de valor.
Restaurar viso
A fase de restaurao da viso recupera a hierarquia de componentes para a pgina solicitada, se ela
foi exibida anteriormente, ou constri uma nova hierarquia de componentes, se for a primeira exibio.
Se a pgina j tiver sido exibida, todos os componentes so recuperados em seu estado anterior. Isso
d condies dos dados de um formulrio submetido ao servidor serem recuperados, caso ocorra algum
problema de validao ou restrio de regra de negcio. Por exemplo, se um formulrio solicita campos
obrigatrios que no so totalmente preenchidos, porm enviados pelo usurio, o mesmo formulrio deve
aparecer novamente com os campos que no estavam vazios j preenchidos, porm com mensagens de
erro indicando os campos requeridos.
Aplicar valores de requisio
Nesta fase, cada componente da hierarquia de componentes criada na fase anterior tem a chance de
atualizar seu prprio estado com informaes que vieram da requisio.
Processar validaes
Os valores submetidos so convertidos em tipos especficos e anexados aos componentes. Quando
voc programa uma pgina em JSF, voc pode incluir validadores que atuam nos valores recebidos pelos
usurios. Neste momento, os validadores entram em ao e, se surgirem erros de converso ou de
validao, a fase de renderizao de resposta invocada imediatamente, pulando todas as outras fases e
exibindo a pgina atual novamente, para que o usurio possa corrigir os erros e submeter os dados mais
uma vez.
Atualizar os valores do modelo
Durante esta fase, os valores anexados (conhecidos como valores locais) aos componentes so
atualizados nos objetos do modelo de dados e os valores locais so limpos.
Invocar a aplicao
Na quinta fase, os eventos que originaram o envio do formulrio ao servidor so executados. Por
exemplo, ao clicar em um boto para submeter um cadastro, a programao da ao deste boto deve ser
executada. Em alguns casos, o mtodo executado pode retornar um identificador dizendo qual a prxima
pgina a ser exibida, ou simplesmente no retornar nada para exibir a mesma pgina.
Renderizar a resposta
Por ltimo, a fase de renderizao da resposta gera a sada com todos os componentes nos seus
estados atuais e envia para o cliente. O ciclo recomea sempre que o usurio interage com a aplicao e
uma requisio enviada ao servidor.
3.13. O arquivo web.xml
As aplicaes web em Java podem ter um arquivo especial, chamado web.xml, que deve ficar na
pasta src/main/webapp/WEB-INF do projeto. Este arquivo tambm chamado de Deployment Descriptor,
pois ele descreve algumas configuraes e detalhes de implantao dos recursos da aplicao.
O arquivo web.xml no obrigatrio, mas podemos cri-lo clicando com o boto direito em
Deployment Descriptor (dentro do projeto) e depois em Generate Deployment Descriptor Stub.
O arquivo ser criado com um contedo semelhante ao cdigo abaixo:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Financeiro</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
O arquivo gerado descreve o nome da aplicao, atravs de display-name, e alguns arquivos de boas
vindas, atravs de welcome-file-list, que so usados caso o usurio acesse o sistema apenas pelo context
path, sem informar o nome de um recurso.
O deployment descriptor de uma aplicao pode descrever tambm servlets, filtros, mapeamentos e
outras configuraes.
Para o framework do JavaServer Faces funcionar, ele registra automaticamente uma servlet chamada
Faces Servlet. Esta servlet mapeada para o padro de URL /faces/*, por isso, quando acessamos uma
pgina, escrevemos /faces/NomeDaPagina.xhtml.
Podemos sobrescrever o registro da Faces Servlet e seu mapeamento.
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Com este novo mapeamento da Faces Servlet, podemos acessar a pgina de listagem de nomes
atravs da URL http://localhost:8080/Financeiro/Nomes.xhtml.
Vamos aproveitar que estamos editando o arquivo web.xml para incluir a configurao abaixo:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
O parmetro de contexto adicionado acima diz que estamos em ambiente de desenvolvimento.
Quando cometermos algum erro, a pgina pode exibir informaes tcnicas adicionais, para nos ajudar a
resolver o problema.
NAVEGAO
4.1. Introduo navegao
Em JSF, navegao um conjunto de regras que define a prxima pgina a ser exibida quando uma
ao executada pelo usurio. Por exemplo, quando um usurio clica em um boto para se inscrever em
um site, qual a prxima pgina ele dever visualizar?
Se os dados estiverem incompletos, provavelmente dever visualizar a mesma pgina, com as
mensagens de erro apropriadas, porm se tudo estiver correto e a inscrio for efetuada com sucesso, ele
poder ver uma pgina de boas vindas ao servio.
A navegao pode ser implcita ou explcita. Estudaremos como configurar os dois tipos.
4.2. Navegao implcita
Quando inclumos um <h:commandButton> com um valor na propriedade action, o mecanismo de
tratamento de navegao tentar encontrar uma pgina adequada automaticamente. No exemplo abaixo,
o mecanismo de navegao encontrar e encaminhar a requisio para a pgina Ola.xhtml.
<h:commandButton value="Prxima pgina" action="Ola" />
O valor passado para a propriedade action chamado de outcome, ou resultado da ao.
Navegao dinmica
Quando um action tem uma expresso de ligao de mtodo, o retorno do mtodo deve ser o
outcome da navegao.
<h:commandButton value="Adicionar" action="#{nomesBean.adicionar}" />
Quando o mtodo adicionar retornar null, o usurio permanecer na mesma pgina. Quando o
retorno for "Ola", a requisio ser encaminhada para a pgina Ola.xhtml.
public String adicionar() {
this.nomes.add(nome);
if (this.nomes.size() > 3) {
return "Ola";
}
return null;
}
Redirecionamento
Por padro, uma requisio encaminhada para a pgina do outcome, ou seja, a requisio nica e
o framework apenas despacha a requisio para uma nova pgina.
Se for necessrio que seja feito o redirecionamento, podemos passar o parmetro facesredirect=true para o outcome.
public String adicionar() {
this.nomes.add(nome);
if (this.nomes.size() > 3) {
return "Ola?faces-redirect=true";
}
return null;
}
4.3. Navegao explcita
As regras de navegao explcitas so declaradas no arquivo faces-config.xml. Para declarar uma
regra explcita, precisamos informar o caminho da pgina de origem, um outcome com um nome qualquer
e o caminho da pgina de destino.
<navigation-rule>
<from-view-id>/Nomes.xhtml</from-view-id>
<navigation-case>
<from-outcome>oi</from-outcome>
<to-view-id>/Ola.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
A regra que acabamos de declarar define que a ao de nome "oi" a partir da origem /Nomes.xhtml
deve encaminhar para a pgina /Ola.xhtml. Para usar esta regra, podemos simplesmente adicionar um
boto na pgina Nomes.xhtml com a propriedade action referenciando o outcome.
<h:commandButton value="Prxima pgina" action="oi" />
Wildcard
Podemos usar wildcard no elemento from-view-id para selecionar diversos arquivos de origem, como
por exemplo * ou /admin/*.
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>oi</from-outcome>
<to-view-id>/Ola.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Redirecionamento
Por padro, a requisio ser encaminhada para a pgina de destino. Se precisarmos fazer o
redirecionamento, basta incluir o elemento <redirect/>.
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>oi</from-outcome>
<to-view-id>/Ola.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
COMPONENTES DE INTERFACE
5.1. Bibliotecas
Para desenvolver um sistema completo em JavaServer Faces, voc deve conhecer pelo menos os
principais componentes bsicos. Quando falamos em componentes bsicos, queremos dizer os
componentes padres da especificao da tecnologia.
As bibliotecas de tags so:
Core: existe para dar suporte s outras bibliotecas, e no possui componentes visuais.
Aprenderemos esta biblioteca no decorrer do livro, sempre que for necessrio
HTML: possui componentes que geram contedo visual, como formulrios, campos de entrada,
rtulos de sada de textos, botes, links, selees, painis, tabela de dados, mensagens e etc.
Facelets: a biblioteca para criao de templates de pginas.
Composite: usada para criar componentes customizados.
Neste captulo, focaremos nos componentes visuais, da biblioteca HTML.
Para usar as bibliotecas, temos que import-las atravs dos namespaces correspondentes.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:composite="http://xmlns.jcp.org/jsf/composite">
Importamos as bibliotecas de tags e nomeamos com os prefixos f, h, ui e composite. Os prefixos
podem ser modificados, mas os que usamos so os convencionais.
Para este curso utilizaremos o Primefaces para demonstrar a utilizao dos Componentes de
Interface.