Este artigo tem como objetivo mostrar ao leitor como utilizar o JavaServer Faces para construir uma aplicação de Ajuda On-line. Aqui, serão analisados diversos componentes básicos do JSF juntamente com alguns componentes específicos do PrimeFaces, suíte que disponibiliza e estende as funcionalidades do JSF a partir de diversos componentes com suporte a AJAX.
Em que situação o tema é útil
O tema abordado neste artigo é útil
para o leitor que deseja desenvolver uma aplicação de ajuda on-line para lojas
virtuais, sites de bancos, cartões, etc. ou mesmo um componente de bate-papo.
Durante o estudo explicamos ainda alguns recursos do JavaServer Faces 2 e do
PrimeFaces para garantir uma boa usabilidade à solução.
O atendimento virtual tem se tornado cada vez mais comum no mundo conectado em que vivemos. Hoje em dia encontramos esse tipo de serviço em sites de bancos, lojas, assistências técnicas e outras empresas que procuram manter um canal prático de comunicação com seus clientes. A solução do chat online oferece algumas vantagens como: baixo custo, comparado ao atendimento por telefone, onde existe o custo da ligação; atendimento simultâneo a vários clientes; facilidade no armazenamento do histórico das conversas; dentre outras.
Este tipo de sistema pode ser construído de diversas maneiras, utilizando várias das tecnologias disponíveis no mercado. No universo Java, escolhemos o JavaServer Faces, tecnologia amplamente adotada para a construção de aplicações web.
O JavaServer Faces é a especificação oficial que define uma abordagem para a construção de aplicações web Java de modo parecido com o utilizado na criação de sistemas desktop, à base de um conjunto de componentes visuais e não visuais, extensíveis em sua maioria. Além dos componentes básicos, como botões, caixas de texto e formulários, existem diversas suítes de componentes, de terceiros, que intensificam o poder do JSF por meio de componentes mais inteligentes e visualmente mais atraentes, como caixas de texto com autocomplete, diálogos modais, drag and drop, suporte transparente a AJAX, etc. Dessa forma, é possível criar aplicações web com interfaces ricas sem muito esforço.
Com base nisso, neste artigo aprenderemos como construir uma aplicação de help desk para lojas virtuais. No nosso sistema, serão gerenciados os usuários, atendentes e chats, bem como a fila de espera. Nossa aplicação será um sistema web construído utilizando a tecnologia JavaServer Faces 2 juntamente com a suíte de componentes PrimeFaces, que dentre outras funcionalidades, adiciona o suporte a AJAX aos componentes JSF, além de uma série de novos componentes próprios. Assim sendo, tanto serão apresentados ao leitor alguns conceitos básicos – como Managed Beans, regras de navegação, validações e injeção de dependências – e componentes JSF, quanto componentes específicos do PrimeFaces, com destaques ao Polling e RemoteCommand.
Background
Antes de iniciarmos a parte prática do nosso artigo, veremos uma pequena introdução a respeito das tecnologias que empregaremos, para que o leitor que ainda não tenha tido a oportunidade de trabalhar com tais tecnologias, sinta-se mais à vontade durante a leitura.
JavaServer Faces e PrimeFaces
Atualmente em sua segunda versão, o JavaServer Faces é uma especificação que foi criada visando definir um padrão para tornar a construção de aplicações web mais simples e eficiente. Para isto, ela oferece um conjunto de componentes visuais e não visuais, bem como APIs para gerenciar esses componentes e tratar os eventos relacionados a estes. Também é oferecido um framework para lidar com validações, conversões, navegação, aparência, internacionalização e acessibilidade, dentre outros aspectos de um sistema web.
Numa aplicação JSF, a interface gráfica é escrita em HTML, com o auxílio de tags especiais, definidas pelas taglibs da especificação (ex.: <h:form/>). Para fazer a ligação entre a interface gráfica e as classes de negócio, que são classes Java comuns, o JSF define o conceito de Managed Beans. Estes, como o próprio nome sugere, representam objetos cujo ciclo de vida é gerenciado pelo JSF. Esses objetos são acessíveis tanto a partir das páginas HTML quanto de outras classes Java da aplicação. Para caracterizar uma classe como um managed bean, ela não precisa herdar de nenhuma classe pré-definida ou mesmo implementar uma interface, basta marcá-la com a anotação @ManagedBean e o JSF se encarrega do restante.
E visando expandir ainda mais o poder do JSF, temos oPrimeFaces, que oferece mais de 120 componentes inteligentes com o visual atraente, além de ser a implementação JSF mais utilizada atualmente. Dessa forma o desenvolvedor passa a contar com um enorme arsenal de componentes, que normalmente atendem a maioria das necessidades da aplicação, facilitando e tornando o desenvolvimento mais produtivo.
Na versão anterior do JavaServer Faces, as declarações dos managed beans eram feitas por meio do arquivo de configuração faces-config.xml ou seus derivados. Na versão 2, seguindo a tendência da plataforma Java EE 6, essas configurações passaram a ser feitas a partir de anotações, mas ainda é possível utilizar o faces-config.xml para esse propósito.
Nada como o clássico “Hello World” para iniciar nossa aventura no universo JSF. Nesse exemplo, implementaremos uma saudação nominal, e para isso exibiremos uma caixa de texto para o usuário digitar seu nome e um botão. Ao clicar no botão, será apresentada uma tela com uma mensagem de boas-vindas personalizada.
As Listagens 1, 2 e 3 mostram o código dessa simples aplicação. Na Listagem 1, podemos observar alguns elementos básicos de uma página JSF 2. Repare que a página é um documento XML com a extensão .xhtml e que, ao invés de diretivas <%@ taglib %>, utilizadas em páginas JSP, são utilizados namespaces para referenciar os grupos de tags fornecidos pelo JSF. Também é necessário substituir as tags HTML <head> e <body> pelas suas correspondentes <h:head> e <h:body> para que o servlet do JavaServer Faces consiga processar o conteúdo da página. A tag <h:form>, encontrada em praticamente toda página, representa um formulário HTML onde colocamos os componentes de interação com o usuário (caixas de texto, listas, labels, botões, etc.). Dentro do formulário, encontramos a tag <h:inputText>, que desenha um campo de entrada de texto, cujo valor está associado a uma propriedade de um dado managed bean. No nosso caso, a propriedade name do managed bean helloBean. Por fim, temos a tag <h:commandButton>, que será renderizada como um botão do tipo submit do HTML. O atributo action define um método do managed bean a ser invocado ou, como no exemplo, simplesmente o identificador da página para onde o sistema deve ser redirecionado. Neste caso, a String “welcome” representa o nome da página que deve ser aberta ao clicar no botão, ou seja, quando o botão for clicado, o JSF irá procurar o arquivo de nome welcome.xhtml e exibi-lo. Note que não é necessário informar a extensão deste arquivo.
Listagem 1. Arquivo index.xhtml com o formulário HTML.
<?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">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h:form>
<h:inputText value="#{helloBean.name}" />
<h:commandButton value="Enviar" action="welcome" />
</h:form>
</h:body>
</html>
Na Listagem 2 temos a classe HelloBean. Como vimos anteriormente, a anotação @ManagedBean serve para indicar ao JavaServer Faces que os objetos dessa classe devem ser gerenciados e disponibilizados às demais partes da aplicação. A outra anotação, @SessionScoped, indica o escopo do bean. Neste caso utilizamos o escopo de sessão (HTTP), o que significa que o estado desse managed bean é mantido entre as requisições de um mesmo usuário. Também é possível utilizar as anotações @RequestScoped, @ApplicationScoped, @ViewScoped, @NoneScoped e @CustomScoped, que definem outros escopos suportados pelo JSF. No mais, a classe contém apenas o atributo name com seus métodos acessores.
Listagem 2. Managed bean HelloBean.
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Na Listagem 3, simplesmente exibimos uma mensagem de boas-vindas, a qual exibe o nome do usuário, armazenado no ...
Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.