Na boa, isso merece um post
Vai encarar?
Filed under Doidera
Login com JSF2
Fala galera, boa noite dependendo de quando voce ta vendo esse post, bem.. esse post como de custume nao vai ter tanta teoria, praticamente só pratica.
A ídeia é fazer uma telinha de login com o JSF2 puro. Para verificar se o usuario existe, utilizaremos o JPA2
Então, let’s go!
Caso nunca tenha usado JPA2, recomendo esse post mais antigo
http://faroljava.wordpress.com/2010/08/13/jpa2-crud-generics-parte-1/
O nosso modelo de usuario
package br.com.lafleur.modelo.usuario;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Usuario {
@Id @GeneratedValue
private int id;
private String login;
private String senha;
//Getters and Setters
}
Nossa JPAUtil
package br.com.lafleur.infra;</pre>
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("jsf2");
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
Nosso UsuarioDAO, nesse caso, o unico metodo que ele vai ter, é para de acordo com o login e senha passados, retornar um boolean se o usuario existe ou não.
package br.com.lafleur.dao.usuario;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.lafleur.infra.JPAUtil;
import br.com.lafleur.modelo.usuario.Usuario;
public class UsuarioDAO {
public boolean existe(Usuario usuario) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
Query query = em
.createQuery("from Usuario u where u.login = :pLogin and u.senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
boolean encontrado = !query.getResultList().isEmpty();
em.getTransaction().commit();
em.close();
return encontrado;
}
}
Agora nosso Managed Bean,bem, o managed bean, serve para fazer o binding(conexao/junção) entre nossa pagina xhtml e o nosso managed bean, para acessarmos o modelo, precisamos de uma instancia de usuario dentro desse managed bean, atravez dele, settamos o login e o password e chamaremos o metodo de autentificação do UsuariDao.
package br.com.lafleur.modelo.mb;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import br.com.lafleur.dao.usuario.UsuarioDAO;
import br.com.lafleur.modelo.usuario.Usuario;
@SessionScoped
@ManagedBean(name="loginBean")
public class LoginBean {
private Usuario usuario = new Usuario();
public Usuario getUsuario() {
return usuario;
}
public String efetuaLogin() {
UsuarioDAO dao = new UsuarioDAO();
boolean loginValido = dao.existe(usuario);
if (loginValido){
return "mainpage?faces-redirect=true";
}
else {
usuario = new Usuario();
return "login";
}
}
}
Um pouco sobre as annotations:
A annotation @ManagedBean é nescessária para podermos justamente fazer esse binding com a pagina xhtml, o atributo name nao é nescessário ja que com a annotation, ja se converte o nome da classe usando carmelCase. A annotation @SessionScoped, serve para jogar o objeto na sessão sendo assim, podemos utiliza-la em diversas páginas diferentes.
Um pouco sobre o ManagedBean:
Criamos a instancia do modelo, para acessarmos os metodos do modelo, também é nescessário criar um get do tipo da instancia.
E criamos um metodo com o retorno uma string pra fazer o redirecionamento para outras paginas, ou a mesma, dependendo do retorno do metodo.
Agora vamos para a pagina xhtml
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view contentType="text/html"/>
<h:head>
<title>Sistema de Cadastro de Usuarios</title>
</h:head>
<h:body>
<h:form>
<legend>Login do Sistema</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Login:" for="nome" />
<h:inputText id="nome" value="#{loginBean.usuario.login }" />
<h:outputLabel value="Password:" for="password" />
<h:inputSecret id="password" value="#{loginBean.usuario.senha}" />
<h:commandButton action="#{loginBean.efetuaLogin }" value="Logar" />
</h:panelGrid>
</h:form>
</h:body>
</html>
<pre>
Reparem no value do <h:command>, <h:input's>, eles utilizam a expression language do JSF, e chamam o managed bean loginBean, acessando o usuario, e apartir do usuario, o login e a senha, e no caso do <h:commandButton, a action dele.. chama o metodo do managedBean efetuaLogin, esse metodo chama o metodo do UsuarioDAO para verificar se o usuario existe no banco ou não, caso ele exista, ele redireciona para uma xhtml chamada mainpage, caso nao.. redireciona para a index.xhtml
Vamos a mainpage.xhtml
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view contentType="text/html"/>
<h:head>
<title>Sistema de Cadastro de Usuarios</title>
</h:head>
<h:body>
<h:form>
<legend>Usuario Logado</legend>
<h:panelGrid columns="2">
<h:outputLabel value="Nome: " />
<h:outputText id="nome" value="#{loginBean.usuario.login}" />
</h:panelGrid>
</h:form>
</h:body>
Pronto, reparem que a mesma EL é usada para mostrar o nome do usuario, bem legal né?
Bem por hoje é só.Abração galera, proximo post sobre jsf2, vou usar o primefaces e ajax do próprio jsf
Vlw o/
Não se esqueçam, Jesus love U <3
Filed under Java, JPA2, JSF, OpenSource, Web
JPA2 -> CRUD + Generics [Parte 1]
Versão do Post[1.5]
Opa galera, tudo certo?
Bem.. vou fazer um CRUD basico com JPA2, ando estudando bastante sobre JPA2 e sinceramente.. gostei mais de brincar com ele do que o Hibernate em si (sei-la.. achei mais divertido), bem vamos la
Primeiro passo: Criar o JPAUtil no pacote br.com.lafleur.faroljava.infra
package br.com.lafleur.faroljava.infra
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
public class JPAUtil{
private static EntityManagerFactory entityManagerFactory = Persistence.CreateEntityManagerFactory("controledecontas");
public EntityManager getEntityManager(){
return entityManagerFactory.createEntityManager();
}
}
Agora precisamos criar nosso DAO Generico
package br.com.lafleur.faroljava.DAO
import javax.persistence.EntityManager;
import java.util.List;
public class DAO<T>{
private final EntityManager em;
private final Class<T> classe;
public DAO(EntityManager em, Class<T> classe){
this.em = em;
this.classe = classe;
}
//Metodos de CRUD genericos
public T busca(Integer id){
return this.em.getReference(classe, id);
}
public List<T> lista(){
return em.createQuery("from " + classe.getName()).getResultLit();
}
public void adiciona(T t){
this.em.persist(t);
}
public void remove(T t){
this.em.remove(t);
}
}
Beleza, ja temos o JPAUtil e o DAO generico, no nosso pequeno projeto, vamos criar uma Conta, mas quais atributos uma conta normalmente tem ? Um titular, uma agencia, um numero e um banco.. coisas basicas por enquanto ^^.
Precisamos então criar nossa entitdade conta
package br.com.lafleur.faroljava.modelo
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Conta{
@GeneratedValue @Id
private Integer id;
private String titular;
private String agencia;
private String numero;
private String banco;
//Getters and Setters
}
E nossa ContaDAO no pacote br.com.lafleur.faroljava.dao
package br.com.lafleur.faroljava.dao.Conta
import javax.persistence.EntityManager;
import java.util.List;
import br.com.lafleur.faroljava.modelo.Conta;
public class ContaDAO{
private final DAO<Conta> dao;
private final EntityManager em;
public ContaDAO(EntityManager em({
this.dao = new DAO<Conta>(em, Conta.class);
this.em = em;
}
public void adiciona(Conta conta){
this.dao.adiciona(conta);
}
public void remove(Conta conta){
this.dao.remove(conta);
}
public List<Conta> lista(){
return this.dao.lista();
}
public Conta busca(Integer id){
return dao.busca(id);
}
}
Pra finalizar agente precisa ainda de duas coisas basicas, primeira, a nossa classe de testes
e segundo nosso persistence.xml, o persistence.xml seria a mesma coisa que o hibernate.cfg.xml.
Criando o persistence.xml: O “diferente” do persistence.xml é que ele ao inves de ficar na pasta src como o hibernate.cfg ele fica na META-INF dentro de src.
Beleza, vamos criar o persistence.xml
<pre><persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> // Passamos o persistence-unit no EntityManagerFactory do JPAUtil <persistence-unit name="controledecontas"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.lafleur.faroljava.modelo.Conta</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/Faroljava" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="UseSeuPassword" /> </properties> </persistence-unit> </persistence>
Pronto nosso persistence.xml foi criado dentro de META-INF da pasta src.
E nossa ContaDAO no pacote br.com.lafleur.faroljava.dao
Não esquecam de criar um FOLDER dentro do src e nomea-lo META-INF
package br.com.lafleur.faroljava.teste;
import javax.persistence.EntityManager;
import br.com.lafleur.faroljava.dao.ContaDAO;
import br.com.lafleur.faroljava.infra.JPAUtil;
import br.com.lafleur.faroljava.modelo.Conta;
public class InsereContaTestDriver{
public static void main(String arg[]){
EntityManager em = new JPAUtil().getEntityManager();
ContaDAO dao = new ContaDAO(em);
Conta c = new Conta();
c.setAgencia("Itau");
c.setBanco("Itau");
c.setNumero("7777-7");
c.setTitular("Max Mustang");
c.setBanco("7777");
em.getTransaction().begin();
dao.adiciona(c);
em.getTransaction().commit();
}
}
Pronto, ja temos um insert com JPA2, para os proximos post vamos implementar os outros metodos o/
Jesus Love you <3
Filed under Hibernate, Java, JPA2, OpenSource
