JavaServer Faces a primeira vista
Saudações Java!
Talvez você já tenha ouvido falar em JavaServer Faces e ainda não tem nenhum contato com este Framework da Sun Microsystems. Neste artigo irei mostar como utilizar JSF através de uma configuração manual, ou seja, sem o uso de IDE. Assim, você saberá exatamente aonde está mexendo e que arquivo deve manipular, mas isto não lhe empede de utilizar alguma IDE como o NetBeans IDE, pois ele já faz isto de forma automática.
JavaServer Faces (JSF), é uma tecnologia de Java do mundo EE(Enterprise Edition), é projetado para simplificar o desenvolvimento de aplicações Web. JSF é utilizado para construir interface do usuário e páginas, e conectar esses componentes a objetos de negócio de forma mais elegante e fácil. Também automatiza o processo no uso de JavaBeans e navegação de páginas.
Por que JavaServer Faces?
No contexto de aplicações Web, a aparência é determinada pelas TAGS HTML que específicam o layout. A lógica de negócios é implementada no código Java, onde determina o comportamento da aplicação.
Algumas tecnologias web, misturam HTML e código do negócio. Isto parece atraente por tornar fácil a produção de aplicações simples em um único arquivo, mas para aplicações sérias, misturar HTML e código, cria problemas consideráveis.
Quando você utiliza JavaServer Faces, você já está usando um padrão muito famoso chamado Model-View-Controller onde Faces separa a lógica de negócios da visualização e requisição. O model sendo seus JavaBeans, a visualização ou apresentação seria as JSPs utilizando as EL expression language e por fim o Controlador sendo o seu sistema de navegação, onde a navegação entre suas páginas é toda mapeada.
JavaBeans
JavaBean é uma classe que expõe propriedades( atributos ) e eventos(métodos) a um ambiente como JSF.
Uma propriedade é um valor nomeado de um determinado tipo que pode ser lido e/ou escrito. O modo mais simples para definir uma propriedade é usar uma convenção de nomeclatura padrão para leitura e escrita de métodos, isto é, a convenção de get/set.
A primeira letra do nome da propriedade é mudada para maiúscula dentro nome do método.
Ex:
private String nome;
public String getNome(){
return nome;
}
public void setNome( String nome ){
this.nome = nome;
}
JSF Pages
Para a criação de páginas que utilizam JSF como framework, você deve utilizar páginas com a extenção .jsp e na chamada do navegador utilizar:
http://localhost:8080/jsfapp/index.jsf
http://localhost:8080/jsfapp/index.faces
http://localhost:8080/jsfapp/faces/index.jsp
Isto depende de como você irá configurar o web.xml de sua aplicação. Para o exemplo que irei mostrar, vou utilizar a configuração para acessar a aplicação com a extenção .jsf.
Suas páginas devem iniciar com a declaração da biblioteca de tags.
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
Você precisa do f:view tag para renderizar suas páginas. E a HTML tag para inserir componentes html em sua página.
Ex:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<h:outputText id=”hello” value=”Welcome !!!” />
</f:view>
Requerimento
Ok, para começar a desenvolver aplicativos web com JSF, você precisa dos seguintes pacotes:
Java SDK 1.4.1 ou posterior (http://java.sun.com/j2se).
Um containter servlet: Apache Tomcat (http://jakarta.apache.org/tomcat/). Você pode rodar aplicações JSF com qualquer container servlet que tem suporte especificações Servlet 2.3 e JSP 1.2.
JavaServer Faces reference implementation (http://java.sun.com/j2ee/javaserverfaces )
Assumiremos que você já instalou o Java SDK e que já está familiarizado com as ferramentas do SDK. Portanto, irei apenas repassar como instalar o Tomcat.
Após ter baixado o tomcat, descompacte-o por exemplo em:
C:\apache-tomcat
Para inicializar o Tomcat, utilizando o windows execute o arquivo startup.bat localizado no diretório /bin do Apache Tomcat. Para testar se o tomcat está rodando, acesse: figura 01 http://localhost:8080
Figura 01. Tela de inicialização do Tomcat
Pronto! Para desligar o servidor basta você executar o arquivo shutdown.bat localizado no diretório /bin.
Exemplo: Enviando E-mails com Autenticação de usuário com JavaServer Faces.
Neste exemplo irei abordar algumas funcionalidades de JSF, utilizando o envio de e-mail onde você irá se autenticar no seu servidor de e-mail.
Configurando a aplicação
Dentro da pasta webapps do tomcat, crie uma pasta chamada jsfapp onde essa será o contexto da nossa aplicação.
A estrutura do diretório vai ficar assim:
C:\jakarta-tomcat\webapps\jsfapp -> NOSSA APLICAÇÃO, PAGES
C:\jakarta-tomcat\webapps\jsfapp\WEB-INF -> NOSSOS ARQUIVOS DE CONFIGURAÇÃO
C:\jakarta-tomcat\webapps\jsfapp\WEB-INF\classes -> NOSSAS CLASSES
C:\jakarta-tomcat\webapps\jsfapp\ WEB-INF\lib -> NOSSA BIBLIOTECA DE TAGS
Adicionaremos os seis JSF jar’s e os dois JSTL jar’s na pasta lib da nossa aplicação.
commons-beanutils.jar, commons-collections.jar, commons-digester.jar, commons-logging.jar, jsf-api.jar, jsf-impl.jar, jstl.jar e standard.jar
Também precisaremos baixar algumas bibliotecas para a utilização do nosso sisteminha de email.
Faça o download do JavaMail em:
http://java.sun.com/products/javamail/downloads/index.html
No pacote zipado você vai precisar dos jar’s:
mail.jar
dns.jar
imap.jar
mailapi.jar
pop3.jar
stmtp.jar
JavaBeans Activation Framework - JAF em:
http://java.sun.com/products/javabeans/jaf/downloads/index.html
activation.jar
Commons Mail da Apache Jakarta em:
http://jakarta.apache.org/commons/email/
commons-email-1.0.jar
Para uma melhor organização, crie uma pasta em um diretório isolado onde você não irá alterar a existência dos arquivos e coloque-os lá:
Ex: C:\Tools4J
Não esqueça que esses jar’s devem ficar na pasta lib da aplicação jsfapp
Agora vamos criar nossos objetos para representar nosso sistema de e-mail. Para fins didáticos iremos colocar nosso método de negócio dentro da mesmo JavaBean.
Listagem 01 Email.java
package mail;
import org.apache.commons.mail.*;
/**
*
* @author Wendell Miranda
*/
public class Email {
private final String SUCCESS = "success";
private final String FAILURE = "failure";
private static String host = "SMTP";
private static String from = "SEU_EMAIL";
private String nome;
private String email;
private String titulo;
private String mensagem;
/** Creates a new instance of Email */
public Email() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {w
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
/*Neste método, se enviar a mensagem, o usuário será direcionado para a página ok.jsp
Ou, se ocorrer alguma exceção durante o envio, ele será redirecionado para a mesma, através do OUTCOME failure. Você poderia utilizar qualquer nome para o OUTCOME. */
public String enviar()throws Exception {
try{
HtmlEmail email = new HtmlEmail();
email.setHostName( host );
email.setAuthentication("USUARIO_DO_EMAIL","SENHA");
email.addTo( getEmail() );
email.setFrom( from ,"CONTATO: "+getNome());
email.setSubject( getTitulo() );
email.setHtmlMsg( getMensagem() );
email.send();
}catch( Exception e ){
e.printStackTrace();
return FAILURE;
}
return SUCCESS;
}
}
Devemos configurar nosso arquivo de navegação chamado faces-config.xml onde iremos declarar nosso objeto e mapear nossa navegação. Nossas páginas devem ser declaradas com a extenção .jsp
Listagem 02 faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/envia.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/ok.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/envia.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>mail</managed-bean-name>
<managed-bean-class>mail.Email</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
Devemos criar nossas pages JSF para que possamos testar nossa aplicação. A página Envia.jsp contém elementos JSF( EL ) que vinculam suas propriedades através da configuração do managed-bean no faces-config . Note que o nome do managed-bean é mail, e suas propriedades são acessadas através do ponto(.)
Nosso escopo é request, pois devemos definitivamente evitar o uso de escopo session. Se você utilizar o escopo session, todo o objeto requisitado vai ficar na sessão( Imagine muitos usuários acessando a sua aplicação ?!).
Listagem 03 Envia.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<h:form>
NOME: <h:inputText id="nome" value="#{mail.nome}" /></br>
E-MAIL: <h:inputText id="email" value="#{mail.email}" /></br>
TITULO: <h:inputText id="titulo" value="#{mail.titulo}" /></br>
MENSAGEM: <h:inputTextarea id="mensagem" rows="8" cols="40" value="#{mail.mensagem}" /></br></br>
<h:commandButton value="Enviar" action="#{mail.enviar}" />
</h:form>
</f:view>
Listagem 04 ok.jsp
Nossa página de confirmação onde irá obter os valores informados pelo usuário, através do método get.
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<h2>Mensagem Enviada!!!</h2>
NOME: <h:outputText id="nome" value="#{mail.nome}" /></br>
E-MAIL: <h:outputText id="email" value="#{mail.email}" /></br>
TITULO: <h:outputText id="titulo" value="#{mail.titulo}" /></br>
MENSAGEM: <h:outputText id="mensagem" value="#{mail.mensagem}" /></br></br>
</f:view>
Conclusões
Nos próximos artigos irei falar mais sobre JSF e suas funcionalidades, como Eventos, Conversão e Validação. Também vou demonstrar a utilização do Netbeans IDE para a criação de aplicações web, utilizando Faces e JPA (Java Persistence API).
Bom, é isso ! Espero que alguém que esteja começando a utilizar JavaServer Faces, esse tutorial lhe ajude a esclarecer alguma dúvida. Qualquer dúvida fique a vontade para fazer contato e trocar algumas idéias ;-)
Segue o código fonte e o WAR da aplicação para você acompanhar o artigo.
Referências
Core JavaServer Faces - http://www.horstmann.com/corejsf/