Monday 25 May 2009

Um exemplo com JSF 2.0

Ola mais uma vez pessoal....
Aqui vai um exemplo em JSF 2.0, devido a impossibilidade de eu colocar o codigo para voces fazerem download, vou ter que colocar classe a classe aqui.
Antes de mais nada, para voces criarem com o plugin que passei para voces no post anterior, o plugin nao tem a opcao para criar .xhtml, portanto vc cria uma pagina .html e depois renomeia ela para .xhtml, isso deve facilitar as coisas.
Este exemplo nao usa nada de AJAX ainda, e so JSF 2.0 puro, somente para voces terem uma ideia geral... de como ele se porta. Claro que ha muito mais coisas para se mostar, mas essa e a primeira visao para voces.
Primeiro o Bean : MyLoginBean.java
package myjsf2.beans;

/*
* MyLoginBean is one bean using annotations and some new features from JSF 2.0
* There are no more the faces-config.xml, everything is made by annotations and
* pages are called via action from XHTML page.
* Tipos de anotacoes para o antigo back bean
* @ManagedBean - Registra a instancia da classe como um managed bean e coloca isso no escopo especificado
* @ManagedProperty - Seta a propriedade do managed bean. A anotacao precisa ser colocada antes da declaracao
* das variaveis membros da classe.
* @ApplicationScoped -
* @SessionScoped -
* @RequestScoped -
* @ViewScoped - Todas estas e como a tag que fala qual o escopo de cada...
* @NoneScoped - Sem escopo
* @CustomScoped - Armazena o managed bean em um custon escopo.
*
*/
import java.io.Serializable;
import javax.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import myjsf2.business.CheckLogin;

@ManagedBean(name = "myLogin")
@SessionScoped
public class MyLoginBean implements Serializable {
private static final long serialVersionUID = 1L;
private String login;
private String password;

// ---- gets and sets from login
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}

// ---- gets and sets from password
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

public String cancel() {
login = "";
password = "";
return "home";
}

public String check() {
if (CheckLogin.checking(login, password)) {
return "final";
}
return "home";
}
}

Agora a segunda classe que e bem boba, somente para voces terem uma ideia da simplicidade do JSF 2.0, que poderia ser uma DAO ou que fizesse coisa similar.
Classe : CheckLogin.java
package myjsf2.business;

public class CheckLogin {
public static boolean checking(String user, String password) {
if ((user.endsWith("admin")) && (password.equals("admin"))) {
return true;
}
return false;
}
}


O arquivo : web.xml
< ?xml version="1.0" encoding="UTF-8"? >
< xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<>myjsf2
<>
<>index.html< / welcome-file >
<>index.htm< / welcome-file >
<>index.jsp< / welcome-file >
<>default.html< / welcome-file >
<>default.htm< / welcome-file >
<>default.jsp< / welcome-file >
< / welcome-file-list >
<>
<>Faces Servlet< / servlet-name >
<>javax.faces.webapp.FacesServlet< / servlet-class >
<>1< / load-on-startup >
< / servlet >
<>
<>Faces Servlet< / servlet-name >
<>/faces/*< / url-pattern >
< / servlet-mapping >
<>

<>Faces Servlet< / servlet-name >
<>*.jsf< / url-pattern >
< / servlet-mapping >
< / web-app >

Agora as tres paginas, que se chamam index.html que e a principal a de welcome, que e chamada automaticamente, depois a home.xhtml que possui o login em si e a final.xhtml que lhe dira se foi efetuado com sucesso ou nao, eu coloquei todas as escritas em ingles, pois como vou demonstrar esse codigo para um pessoal que usa JSF 1.2, ficara mais facil para mim do que ter que ficar mudando tudo novamente.
View : index.xhtml
<>
<>
< equiv="Content-Type" content="text/html; charset=UTF-8">
<>GlassFish PROMOTED v3< / title >
< / head >
<>
<>Directing to JSF 2.0 page...< / h1 >
< equiv="Refresh" content="0;url=home.jsf">
< / body >
< / html >

View : home.xhtml
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< xmlns="http://www.w3.org/1999/xhtml" h="http://java.sun.com/jsf/html">

<>
< equiv="Content-Type" content="text/html; charset=iso-8859-1">
<>Insert title here< / title >
< / h:head >

<>
< id="home" prependid="false">
< name="jsf.js" library="javax.faces" target="head">
< name="stylesheet.css">
< id="zerotext" value="JSF 2.0 Login">
<>
< id="onetext" value="Login :">
< id="oneinput" value="#{myLogin.login}">
<>
< id="twotext" value="Password :">
< id="twoinput" value="#{myLogin.password}">
<>
< id="validate" value="Login" action="#{myLogin.check()}">
< id="cancel" value="Cancel" action="#{myLogin.cancel()}">
< / h:form >
< / h:body >
< / html >

View : final.xhtml
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<>
< equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<>Succesful validate.< / title >
< / head >
<>
<>Succesful validate.< / h1 >
< / body >
< / html >

Com isso voce tem um mini projeto em JSF 2.0 para vc comecar a fucar, o que realmente indico e baixar o source dele do link MOJARRA 2.0
La voce pode baixar as ultimas atualizacoes para ver como esta ficando. O que acho bem valido, visto que as novas versoes devem sair ate o fim do ano.... SE 7 e EE 6!!!
Como voces podem ver tambem, nao existe mais .xml a nao ser o web descriptor (web.xml) mais nada.
Quanto ao codigo me desculpem mas esse blogger nao e muito bom para se colocar codigos entao nas views eu tive que incluir espacos em cada tag no comeco e no final para poder postar, portanto se vc quizer dar um copy/paste nao pode esquecer de tirar estes espacos.
Bom e isso ae se nao conseguirem fazer funcionar podem mandar post ou um email para klaus_villaca@gmail.com
Abracos e ate semana que vem qdo vou postar um com AJAX integrado...

No comments: