quarta-feira, 22 de outubro de 2008
CRUD com JSF e JPA - parte3/3
Depois de muito tempo sem fazer nenhum post, aqui estou eu firme e forte para publicar a parte final deste tutorial!!!
A aplicação deste tutorial se encontra disponível na integra no link abaixo:
TUTORIAL_DAY_CRUD.zip
E vamos lá!!!...
As paginas JSP devem ser criadas no diretório /WebContent da aplicação web.
Página formCity.jsp
Esta página contém o formulário de Cadastro de Cidades.
Página formClient.jsp
Esta página contém o formulário de Clientes.
Página alterClient.jsp
Esta página contém o formulário de alteração de dados do cliente.
Página listCity.jsp
Esta página exibe uma lista de Cidades cadastradas tendo a opção de deletar as mesmas.
Página listClient.jsp
Esta página exibe uma lista de Clientes cadastrados e possibilita a alteração (chama outro formulário através do método do bean clientview) e/ou exclusão dos mesmos.
index.jsp
Esta página contém a entrada principal da nossa aplicação, nela possui chamadas para os demais formulários.
Espero que tenham gostado deste tutorial simples...
e qualder duvida é só deixar em comentários.
Valeuwww... =P
segunda-feira, 18 de fevereiro de 2008
CRUD com JSF e JPA - parte2/3
Agora iremos criar a classe ClientController no pacote com.tutorialday.controller , a mesma será o nosso FacesBean.
CLASSE ClientController
package com.tutorialday.controller;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import com.tutorialday.dao.BaseDao;
import com.tutorialday.model.City;
import com.tutorialday.model.Client;
public class ClientController {
private Client client;
private City city;
private DataModel model;
private String ccity;
public String getCcity() {
return ccity;
}
public void setCcity(String ccity) {
this.ccity = ccity;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
// METODO QUE CRIA UM OBJETO CLIENT
public String newClient(){
this.client = new Client();
return "newClient";
}
// METODO QUE MANIPULA A PERSISTÊNCIA DO OBJETO CLIENT
public String create(){
BaseDao<City> cdao = new BaseDao<City>();
City city = cdao.findCityByName(ccity); // FAZENDO CONSULTA PELO NOME DA CIDADE
setCity(city); // "SETANDO" A CIDADE
BaseDao<Client> dao = new BaseDao<Client>();
client.setCity(city);
dao.create(client);
return "success_creCli";
}
// METODO QUE MANIPULA A EXCLUSÃO DO OBJETO CLIENT
public String delete(){
BaseDao<Client> dao = new BaseDao<Client>();
Client client = (Client) model.getRowData();
dao.delete(client);
return "success_delCli";
}
// METODO QUE CATA O OBJETO CLIENT DA DATATABLE (PAGINA)
public String edit(){
Client client = (Client) model.getRowData();
setClient(client);
return "editCli";
}
// METODO QUE MANIPULA A ALTERAÇÃO DO OBJETO CLIENT
public String update(){
BaseDao<City> cdao = new BaseDao<City>();
City city = cdao.findCityByName(ccity);
setCity(city);
BaseDao<Client> dao = new BaseDao<Client>();
client.setCity(city);
dao.update(client);
return "success_upd";
}
// METODO QUE CRIA UM OBJETO CITY
public String newCity(){
this.city = new City();
return "newCity";
}
// METODO QUE MANIPULA A PERSISTÊNCIA DO OBJETO CITY
public String createCity(){
BaseDao<City> cdao = new BaseDao<City>();
cdao.create(city);
return "success_creCity";
}
// METODO QUE MANIPULA A EXCLUSÃO DO OBJETO CITY
public String deleteCity(){
BaseDao<City> dao = new BaseDao<City>();
City city = (City) model.getRowData();
dao.delete(city);
return "success_delCity";
}
// METODO QUE CATA O OBJETO CITY DA DATATABLE (PAGINA)
public String editCity(){
City city = (City) model.getRowData();
setCity(city);
return "editCity";
}
// METODO QUE MANIPULA A ALTERAÇÃO DO OBJETO CITY
public String updateCity(){
BaseDao<City> dao = new BaseDao<City>();
dao.update(city);
return "success_upd";
}
// METODO QUE RETORNA UMA LISTA DE CLIENT PARA O
// DATATABLE
public DataModel getAllClient(){
BaseDao<Client> dao = new BaseDao<Client>();
model = new ListDataModel(dao.allClient());
return model;
}
// METODO QUE RETORNA UMA LISTA DE CITY PARA O DATATABLE
public DataModel getAllCity(){
BaseDao<City> dao = new BaseDao<City>();
model = new ListDataModel(dao.allCity());
return model;
}
// METODO QUE RETORNA UMA LISTA COM OS NOMES DAS CITYS
//PARA O SELECTITEMS (PAGINA)
public List getListNameCity(){
BaseDao<SelectItem> dao = new BaseDao<SelectItem>();
return dao.listCity();
}
}
Devemos agora criar um o arquivo persistence.xml no diretório META-INF que criamos, este arquivo mapeará nossas classes models e o banco de dados.
ARQUIVO persistence.xml
<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 persistence_1_0.xsd"
version="1.0">
<persistence-unit name="tutorial" transaction-type="RESOURCE_LOCAL">
<provider>
oracle.toplink.essentials.PersistenceProvider
</provider>
<class>com.tutorialday.model.Client</class>
<class>com.tutorialday.model.City</class>
<properties>
<property name="toplink.logging.level" value="FINE" />
<property name="toplink.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
<property name="toplink.jdbc.url" value="jdbc:db2://localhost:50000/TUTORIAL" />
<property name="toplink.jdbc.password" value="SENHA AQUI" />
<property name="toplink.jdbc.user" value="USUARIO AQUI" />
</properties>
<!-- MySQL DataBase
<properties>
<property name="toplink.logging.level" value="FINE" />
<property name="toplink.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="toplink.jdbc.url"
value="jdbc:mysql://localhost:3306/TUTORIAL" />
<property name="toplink.jdbc.password" value="" />
<property name="toplink.jdbc.user" value="root" />
</properties>
-->
</persistence-unit>
</persistence>
Devemos observar que temos em comentário neste XML a configuração para o banco de dados MySQL(em fonte verde), não esqueça de colocar o usuário e a senha corretamente do seu banco de dados.
Para finalizarmos esta segunda etapa deste tutorial agora iremos mapear o nosso FacesBean e fazer a regra de navegação no arquivo faces-config.xml que se encontra dentro de ../WebContent/WEB-INF/ . Entre as tags <faces-config> </faces-config> , devemos adicionar as tags abaixo:
<!-- Bean ClientController -->
<managed-bean>
<managed-bean-name>clientView</managed-bean-name>
<managed-bean-class>
com.tutorialday.controller.ClientController
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<display-name>newCity</display-name>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>newCity</from-outcome>
<to-view-id>/formCity.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>newClient</display-name>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>newClient</from-outcome>
<to-view-id>/formClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>listCity</display-name>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>ListCity</from-outcome>
<to-view-id>/listCity.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>listClient</display-name>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>ListClient</from-outcome>
<to-view-id>/listClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>successCreCity</display-name>
<from-view-id>/formCity.jsp</from-view-id>
<navigation-case>
<from-outcome>success_creCity</from-outcome>
<to-view-id>/listCity.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>successDelCity</display-name>
<from-view-id>/listCity.jsp</from-view-id>
<navigation-case>
<from-outcome>success_delCity</from-outcome>
<to-view-id>/listCity.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>successCreClient</display-name>
<from-view-id>/formClient.jsp</from-view-id>
<navigation-case>
<from-outcome>success_creCli</from-outcome>
<to-view-id>/listClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>successDelClient</display-name>
<from-view-id>/listClient.jsp</from-view-id>
<navigation-case>
<from-outcome>success_delCli</from-outcome>
<to-view-id>/listClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>editClient</display-name>
<from-view-id>/listClient.jsp</from-view-id>
<navigation-case>
<from-outcome>editCli</from-outcome>
<to-view-id>/alterClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>successUpdClient</display-name>
<from-view-id>/alterClient.jsp</from-view-id>
<navigation-case>
<from-outcome>success_upd</from-outcome>
<to-view-id>/listClient.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Pronto! Temos nosso projeto configurado, não podemos esquecer de colocar as seguintes JARS dentro do diretório ../WebContent/WEB-INF/lib/ :
· Db2jcc.jar
· Db2jcc_license_cu.jar
· Ejb3-persistence.jar
· Mysql-connector-java-5.0.X-bin.jar (Caso use o MySQL)
· Toplink-essentials.jar
· JARS para o JSF
Obs: As JARS do framework JSF geralmente são adicionados automaticamente pela IDE, no caso da IDE Eclipse-Rational Software Architect é adicionado apenas a JAR jsf-ibm.jar .
No proximo post iremos finalizar este tutorial com a criação das páginas JSPs(View).
Até maissss...............
domingo, 20 de janeiro de 2008
CRUD com JSF e JPA - parte1/3
Recursos necessários:
IDE de desenvolvimento Java (Netbeans ou Eclipse).
Banco de dados DB2 ou MySQL.
Oracle TopLink Essential (funcionalidades para o JPA), pode ser obtido em : www.oracle.com/technology/jpa
Primeiramente vamos criar o Banco de Dados, abaixo temos uma figura do modelo do banco TUTORIAL e suas SQLs.
Figura 1: TUTORIAL DATABASE
CREATE DATABASE TUTORIAL;
USE TUTORIAL;
CREATE TABLE CITY(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
CITY VARCHAR(30));
CREATE TABLE CLIENT(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
NAME VARCHAR(50),
ADDRESS VARCHAR(100),
ID_CITY INT,
CONSTRAINT CLI_CITY_FK FOREIGN KEY(ID_CITY) REFERENCES CITY(ID)
);
Agora Utilizando sua IDE preferida devemos criar um novo projeto Web utilizando o framework JSF.
Com o projeto iniciado devemos criar três pacotes e um diretório como mostra a figura 2:
· Pacote – com.tutorialday.controller
· Pacote – com.tutorialday.dao
· Pacote – com.tutorialday.model
· Diretório – META-INF
Figura 2: Estrutura do Projeto
CLASSE City
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="city")
public class City {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="city")
private String city;
@OneToMany(cascade=CascadeType.ALL, mappedBy="city")
private Collection
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Collection
return client;
}
public void setClient(Collection
this.client = client;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="client")
public class Client {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="name")
private String name;
@Column(name="address")
private String address;
@ManyToOne
@JoinColumn(name="id_city", nullable = false)
private City city;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.tutorialday.model.City;
public class BaseDao
private static EntityManagerFactory emf;
private EntityManager getEntityManager(){
return emf.createEntityManager();
}
public BaseDao(){
emf =
Persistence.createEntityManagerFactory("tutorial");
}
// METODO PARA PERSISTIR
public boolean create(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
// METODO PARA ATUALIZAR
public boolean update(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.merge(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
}
finally {
em.close();
}
}
// METODO PARA EXCLUIR
public boolean delete(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
obj = em.merge(obj);
em.remove(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
public List allClient(){
EntityManager em = getEntityManager();
try{
Query usu = em.createQuery("select object(c) from Client as c");
return usu.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
public List allCity(){
EntityManager em = getEntityManager();
try{
Query cty = em.createQuery("select object(ct) from City as ct");
return cty.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
@SuppressWarnings("unchecked")
public List
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select ct.city from City as ct");
List
List
int i;
for (i=0; i <>
@SuppressWarnings("unchecked")
public T findCityByName(String cty){
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select object(ct) from City as ct where ct.city
return (T) city.getSingleResult();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
}