Arquivo da categoria ‘Java’

O Apache Maven é uma ferramenta de gerenciamento de projetos de software e compreensão de pacotes. Baseado no conceito de um modelo de objeto do projeto (POM), O Maven pode gerir um projeto de construção (compilação), elaboração de relatórios e documentação de uma única central de informações.

Um Project Object Model, fornece todas as configurações para um único projeto. A configuração geral cobre o nome do projeto, seu proprietário e suas dependências de outros projetos. Também pode configurar fases individuais do processo de construção, que são implementados como plug-ins. Projetos maiores poderiam ser divididos em vários módulos, ou subprojetos, cada um com seu próprio POM. Cada um pode então escrever um POM raiz através do qual pode-se compilar todos os módulos com um único comando.

O Maven utiliza templates chamados de Archetypes ou arquétipos que são um conjunto de ferramentas de modelagem do projeto Maven. Um arquétipo é definido como um padrão ou modelo inicial a partir da qual todos os outros objetos do mesmo tipo são feitos contemplando as melhores praticas para cada modelo. Os Arquétipos ajudam autores a criar modelos de projeto Maven para os usuários, e oferece aos usuários os meios para gerar versões parametrizadas desses modelos de projeto.

Versões mais modernas do Eclipse já contemplam uma instalação para criar projetos Maven, mas não habilita comandos no ambiente de console do Linux, siga os passos abaixo para instalar o Maven para ser utilizado pela linha de comando no console, isto é muito versátil quando você precisa instalar arquivos jar no repositório do Maven.

Maven: https://maven.apache.org/

Instalando o Apache Maven no Linux openSuse

1 – Abra o console do Linux e digite as seguintes linhas de comando:


java -version

cd Downloads

tar xvzf apache-maven*.tar.gz -C /tmp/

sudo su

rm /home/[myUser]/Downloads/apache-maven*bin.tar.gz

chown -R root:root /tmp/apache-maven*

mv /tmp/apache-maven* /opt/

exit

kdesu kwrite $HOME/.bashrc

//*** Adicione a linha abaixo dentro do arquivo no kwrite e salve (vide imagem)
//export PATH=$PATH:/opt/apache-maven-3.3.9/bin/
//****
source $HOME/.bashrc

mvn -version

Os comando acima tem a seguinte ação

  • Verifica se você possui o Java (Obrigatório).
  • Abre a pasta de download do usuário, descompacta o arquivo em um diretório temporário.
  • Eleva direitos de super usuário, atribui propriedade ao usuário, exclui o arquivo baixado e move a instalação para o diretório correto.
  • Abre o arquivo de configuração do Linux usando a GUI para que você o altere e aplique as alterações no sistema.
  • Testa o Maven instalado.
Instalar Maven

Instalar Maven

Você deve adaptar os comandos de acordo com a realidade do arquivo binário do Maven no qual baixou e o usuário do seu sistema operacional.

2 – Atente-se para a alteração no arquivo bashrc e coloque a linha para inserir o caminho do Maven a variável de ambiente $PATH. Apos completar todos os comandos você deve obter a versão do Maven  indicando que a instalação foi um sucesso:

Maven -version

Maven -version

O Apache Maven foi instalado com sucesso no seu openSuse e você já pode utilizar o Maven através da linha de comando no console.

O Apache Tomcat  é um servidor web desenvolvido pela Apache Software Foundation (ASF). O Tomcat implementa o Java Servlet e JavaServer Pages (JSP) especificados pela Oracle, e fornece um ambiente de servidor puro JavaHTTP web para o código Java.

TomCat 8: http://tomcat.apache.org/

Instalando o Apache Tomcat

1 – Após o download do arquivo você precisa instalar o JDK 8, caso ainda não tenha instalado basta dar duplo clique no arquivo jdk-8u65-linux-x64.rpm para efetuar a instalação.

Linux JDK 8 RPM: Download

Para Instalar o tomcat8:

sudo tar -zxvf apache-tomcat-8.0.28.tar.gz -C /usr/local/

2- Caso não tenha nenhum servidor rodando na porta 8080, pule este passo. Caso tenha um outro servidor web em sua maquina ou pretenda trabalhar com o Oracle Database (Oracle usa APEX na 8080) mude as todas portas do arquivo de configuração para que iniciem o valor 9, por exemplo: 9080 e assim por diante, utilize a figura abaixo para referencia:

kdesu kwrite /usr/local/apache-tomcat-8.0.28/conf/server.xml

 

Server.xml

Server.xml

3 – Você precisa definir um usuário e senha para que possa acessar as configurações do Tomcat, digite a seguinte linha de comando para alterar o arquivo de usuários:

kdesu kwrite /usr/local/apache-tomcat-8.0.28/conf/tomcat-users.xml
Users.xml

Users.xml

Inclua os dados abaixo no arquivo xml:

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

4 – Digite o comando a seguir para iniciar o servidor Tomcat:

sudo /usr/local/apache-tomcat-8.0.28/bin/startup.sh
Iniciando o Tomcat

Iniciando o Tomcat

5 – Abra o seu navegador e digite o seguinte endereço, “localhost:9080“:

Localhost:9080 - Tomcat

Localhost:9080 – Tomcat

6 – Para finalizar atribua o diretório do Tomcat ao seu usuário pois vai necessitar assim que utilizar o Eclipse ou alguma outra IDE de sua preferencia para que possa acessar os arquivos do Tomcat e iniciar uma nova instancia de sua IDE. Atente-se que no comando abaixo DevAberto é o usuário logado no Linux, você também deve ficar atento as versões do arquivo que você está baixando e adaptar as linhas de comandos para que você não obtenha erros:

sudo chown -R DevAberto /usr/local/apache-tomcat-8.0.28/

Tudo pronto e você já está apto a criar suas aplicações Java para Web, utilize nossos exemplos para aprender mais sobre Java EE.

Hibernate – One To One Mapping – Oracle – Java

Publicado: 28 de março de 2015 em Java

Linguagens orientadas a objeto utilizam atualmente frameworks ORM para persistir objetos no banco de dados relacional. Um clássico relacionamento entre duas tabelas em um banco de dados é feito através de uma chave primaria que contem um identificador em uma tabela e dados adicionais e uma chave estrangeira em outra tabela que define a referencia ao seu registro mestre, este tipo de referencia é comumente conhecido como referencia pai e filho ou mestre e detalhes. Ao longo dos anos os dados alimentados em tabelas mestre/detalhes foram inseridos através de scripts SQL escritos manualmente, ou seja se faz necessário que o desenvolvedor escreva um script pra inserir os dados na tabela mestre primeiro e depois escreva outro script para inserir os dados na tabela de detalhes, a chave estrangeira previne que somente seja inseridos dados na tabela de detalhes no qual possui uma referencia na tabela mestre, tornando assim o banco de dados integro.

Os frameworks modernos nos permitem persistir objetos utilizando a sintaxe da programação orientada a objeto de sua preferencia ao invés de usar scripts SQL tradicionais, pois estes serão criados automaticamente pelo próprio framework. Uma das vantagens de se usar este tipo de framework é que você pode persistir dados diretamente de seus objetos não precisando escrever linhas de código SQL. No entanto é preciso que você domine os conceitos exigidos pelo framework para criar cada tipo de recurso que a linguagem SQL oferece para que seu código rode redondo e com ótimo desempenho.

No caso do Hibernate é necessário que você utilize corretamente as anotações pra que o framework saiba como funciona o relacionamento entre as duas tabelas.

One To One: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#d5e3678

One To One Mapping

1 – Primeiramente crie duas tabelas utilizando o script abaixo no banco de dados Oracle e crie sua foreign key adequadamente, caso a chave estrangeira esteja incorreta o Hibernate não conseguira utilizar o relacionamento adequadamente:

Oracle - FK - Chave Estrangeira

Oracle – FK – Chave Estrangeira

2 – Crie um novo projeto Java SE e utilize os códigos abaixo para suas respectivas classes. Atente-se para as anotações pois elas são importantes e precisam estar corretamente decoradas em seus atributos ou métodos, nunca misture as anotações entre atributos e métodos:

Hibernate - Persistindo Dados - One To One

Hibernate – Persistindo Dados – One To One

3 – Após rodar sua aplicação abra o Oracle SQL Developer e veja o conteúdo das duas tabelas. Você pode reparar que com apenas uma Sequence criando o identificador você automaticamente gravou os dados mestre/detalhes fazendo referencia ao seu ID:

Oracle SQL Developer - Resultado

Oracle SQL Developer – Resultado

Exemplo:

Neste exemplo criamos duas tabelas e uma chave estrangeira que faz referencia ao seu identificador criando um relacionamento mestre/detalhes. Utilizamos o framework Hibernate e seu relacionamento One To One para persistir dois objetos que foram mapeados adequadamente para salvar registros mestres e seus detalhes mantendo a integridade relacional no banco de dados.

SQL

-- Cria Sequence Participante
CREATE SEQUENCE SEQ_CARROS
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

-- Cria tabela de participantes
CREATE TABLE CARROS
(
  ID_CARRO INTEGER NOT NULL
, DESCRICAO VARCHAR2(30) NOT NULL

, CONSTRAINT CARROS_PK PRIMARY KEY
  (
    ID_CARRO
  )
  ENABLE
);

-- Cria tabela de carro_detalhes
CREATE TABLE CARROS_DETALHES
(
  ID_CARRO INTEGER NOT NULL
, MARCA VARCHAR2(30) NOT NULL
, MODELO VARCHAR2(30) NOT NULL
, ANO INTEGER NOT NULL

, CONSTRAINT CARROS_DETALHES_PK PRIMARY KEY
  (
    ID_CARRO
  )
  ENABLE

);

-- Cria Contraint chave estrangeira
ALTER TABLE CARROS_DETALHES ADD CONSTRAINT CARRO_FK
FOREIGN KEY  (ID_CARRO) REFERENCES CARROS (ID_CARRO);

Java

Carros

package org.desenvolvimento.aberto;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "CARROS")
public class Carros {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CARROS")
	@SequenceGenerator(name = "SEQ_CARROS", sequenceName = "SEQ_CARROS")
	@Column(name = "ID_CARRO")
	private int id_carro;

	@Column(name = "DESCRICAO")
	private String descricao;

	// Cria instancia dos detalhes
	@OneToOne(mappedBy= "carros", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_CARRO")
	private CarrosDetalhes carroDetalhes;

	// Getters & Setters Carros
	public int getId_carro() {
		return id_carro;
	}

	public void setId_carro(int id_carro) {
		this.id_carro = id_carro;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	// Getter & Setter detalhes
	public CarrosDetalhes getCarroDetalhes() {
		return carroDetalhes;
	}

	public void setCarroDetalhes(CarrosDetalhes carroDetalhes) {
		this.carroDetalhes = carroDetalhes;
	}

}

CarrosDetalhes

package org.desenvolvimento.aberto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;

@Entity
@Table(name = "CARROS_DETALHES")
public class CarrosDetalhes {

	@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "carros"))
	@Id
	@GeneratedValue(generator = "generator")
	@Column(name = "ID_CARRO")
	private int id_carro;

	@Column(name = "MARCA")
	private String marca;

	@Column(name = "MODELO")
	private String modelo;

	@Column(name = "ANO")
	private int ano;

	@OneToOne(fetch = FetchType.LAZY)
	@PrimaryKeyJoinColumn
	private Carros carros;

	public int getId_carro() {
		return id_carro;
	}

	public void setId_carro(int id_carro) {
		this.id_carro = id_carro;
	}

	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public Carros getCarros() {
		return carros;
	}

	public void setCarros(Carros carros) {
		this.carros = carros;
	}

}

Teste

package org.desenvolvimento.aberto;

import org.hibernate.Session;

public class Testar {

	public static void main(String[] args) {

		// Cria sessão
		Session session = DBConexaoFactory.getSessionFactory().openSession();

		// Cria transação
		session.beginTransaction();

		// Cria objeto de detalhes
		CarrosDetalhes detalhes = new CarrosDetalhes();

		detalhes.setMarca("Honda");
		detalhes.setModelo("Civic");
		detalhes.setAno(2015);

		// Cria objeto carro
		Carros carros = new Carros();
		carros.setDescricao("Honda");

		// adiciona detalhes ao carro
		carros.setCarroDetalhes(detalhes);
		detalhes.setCarros(carros);

		// salva carro
		session.save(carros);

		// Confirma e encerra transação
		session.getTransaction().commit();

	}
}

DbConexaoFactory

package org.desenvolvimento.aberto;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DBConexaoFactory {

	private static final SessionFactory sessionFactory = buildSessionFactory();

    // Constroi sessão
    @SuppressWarnings("deprecation")
    private static SessionFactory buildSessionFactory() {
        try {
            // buildSessionFactory não será utilizado em versões superiores
            // Veremos outros métodos para criar um Factory
            // Não é necessário incluir o "hibernate.cfg.xml" no configure()
            // Incluímos somente a nível de fácil entendimento da chamada da
            // configuração.
            // Você pode retirar a chamada.
            return new Configuration().configure("hibernate.cfg.xml")
                    .buildSessionFactory();
        } catch (Throwable ex) {
            // Em caso de erro
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    // Retorna Factory da sessão
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    // Encerra Sessão
    public static void shutdown() {
        getSessionFactory().close();
    }
}

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.current_session_context_class">thread</property>

<mapping class="org.desenvolvimento.aberto.Carros" />
<mapping class="org.desenvolvimento.aberto.CarrosDetalhes" />

</session-factory>
</hibernate-configuration>

Na maioria das vezes é útil utilizar componentes de listas conhecidos como Combobox ou Dropdown para mostrar relacionamentos de dados entre tabelas e de uma forma amigável exibir a descrição dos itens de dados e manipular seu identificador único. Para isto o JavaServer Faces nos disponibiliza componentes e classes no qual nos permite manipular dados através de objetos e persisti-los em um banco de dados relacional usando o Hibernate. Um relacionamento de dados mais simples é criado através de duas tabelas, sendo uma tabela pai que contem os dados mestres e uma filho que contem um ou mais identificadores relacionados ao pai. Um modo de fácil de identificar e tradicional de utilizar relacionamentos em um banco de dados é através de chaves estrangeiras, uma chave estrangeira é um campo, que aponta para a chave primária de outra tabela ou da mesma tabela. Ou seja, passa a existir uma relação entre duas tabelas ou de uma única tabela. A finalidade da chave estrangeira é garantir a integridade dos dados referenciais, pois apenas serão permitidos valores que supostamente vão aparecer na base de dados e estão ligados ao registro mestre.

Exibindo Relacionamentos

1 – Primeiro crie duas tabelas e seus respectivos objetos no banco de dados Oracle, atente-se para a chave estrangeira que cria o relacionamento entre as tabelas usando a chave primaria da tabela pai:

Oracle - Relacionamento

Oracle – Relacionamento

2 – Crie uma aplicação JSF e use o código abaixo, o código é o mesmo dos exemplos anteriores, porem criamos novos objetos e novos modelos para comportar o relacionamento de dados das duas tabelas e exibi-los de uma forma amigável na pagina web. Clicando no botão de enviar, você automaticamente grava os dados no banco de dados:

JSF - Hibernate - Oracle

JSF – Hibernate – Oracle

3 – Assim que os dados forem enviados o Hibernate gravará o conteúdo dos objetos no banco de dados relacional, você pode verificar na pagina que mostramos a descrição do campo cargo toda vez que utilizamos os dados da tabela de Cargos, porem na tabela Participante apenas seu identificador é gravado formando o relacionamento entre as duas tabelas:

Oracle - Relacionamento - Chave Estrangeira

Oracle – Relacionamento – Chave Estrangeira

Exemplo:

Neste exemplo criamos duas tabelas no banco de dados Oracle e as relacionamos através da chave primaria e uma chave estrangeira. Usamos um elemento JSF para tornar este relacionamento amigável, exibindo assim a descrição do relacionamento mas manipulando seu identificador e os persistindo através do Hibernate.

SQL

-- Cria Sequence Participante
CREATE SEQUENCE SEQ_PARTICIPANTE
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

-- Cria tabela de participantes
CREATE TABLE PARTICIPANTE
(
  ID_PART INTEGER NOT NULL
, NOME VARCHAR2(30) NOT NULL
, SOBRENOME VARCHAR2(70) NOT NULL
, ID_CARGO INTEGER NOT NULL
, DATA_ADMISSAO DATE NOT NULL
, SALARIO NUMBER(9,2) NOT NULL
, GENERO VARCHAR2(20) NOT NULL
, ATIVO CHAR(5) NOT NULL
, OBSERVACAO VARCHAR2(255)
, CONSTRAINT PARTICIPANTE_PK PRIMARY KEY
  (
    ID_PART
  )
  ENABLE
);

-- Cria Sequence Cargo
CREATE SEQUENCE SEQ_CARGO
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

-- Cria tabela de cargo
Create Table CARGO (
 ID_CARGO INTEGER NOT NULL,
 DESC_CARGO VARCHAR2(50) NOT NULL,

CONSTRAINT CARGO_PK PRIMARY KEY
  (
     ID_CARGO
  )
  ENABLE

);

-- Alimenta dados na tabela de cargos
insert into cargo values (SEQ_CARGO.NEXTVAL , 'Vocalista');
insert into cargo values (SEQ_CARGO.NEXTVAL, 'Guitarrista');
insert into cargo values (SEQ_CARGO.NEXTVAL, 'Baixista');
insert into cargo values (SEQ_CARGO.NEXTVAL, 'Baterista');

-- Cria Contraint chave estrangeira
ALTER TABLE PARTICIPANTE ADD CONSTRAINT CARGO_FK
FOREIGN KEY  (ID_CARGO) REFERENCES CARGO (ID_CARGO);

Java

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.current_session_context_class">thread</property>

<mapping class="org.desenvolvimento.aberto.Modelo.CargoModelo" />
<mapping class="org.desenvolvimento.aberto.Modelo.ParticipanteModelo" />

</session-factory>
</hibernate-configuration>

Participante

package org.desenvolvimento.aberto;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import org.desenvolvimento.aberto.Modelo.CargoModelo;
import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;
import org.desenvolvimento.aberto.dao.ParticipanteDao;

// Define decoradores
@ManagedBean(name = "Participante")
@SessionScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private int cargo;
	private Date data;
	private double salario;
	private String genero;
	private boolean ativo;
	private String observacao;
	private List<SelectItem> cargoItem;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public int getCargo() {
		return cargo;
	}

	public void setCargo(int cargo) {
		this.cargo = cargo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public List<SelectItem> getCargoItem() {

		// Cria objeto de modelo Faces
		cargoItem = new ArrayList<SelectItem>();

		// cria objeto DAO
		ParticipanteDao participante = new ParticipanteDao();
		List<CargoModelo> cargo = participante.listacargos();

		// Alimenta Modelo
		for (CargoModelo c : cargo) {
			SelectItem selecao = new SelectItem(c.getId_cargo(), c.getCargo());
			cargoItem.add(selecao);

		}

		return cargoItem;
	}

	// Grava Dados usando Hibernate
	// Você pode criar um modelo de dados para este Managed Bean
	// Optamos por usar o próprio objeto através da referencia This

	public String enviarDados() {
		// Cria objeto DAO
		ParticipanteDao participante = new ParticipanteDao();

		// cria objeto Modelo
		ParticipanteModelo modelo = new ParticipanteModelo();

		// Transfere dados ao objeto
		modelo.setNome(this.getNome());
		modelo.setSobrenome(this.getSobrenome());
		modelo.setCargo(this.getCargo());
		modelo.setData(this.getData());
		modelo.setSalario(this.getSalario());
		modelo.setGenero(this.getGenero());
		modelo.setAtivo(String.valueOf(this.isAtivo()));
		modelo.setObservacao(this.getObservacao());
		// Você pode criar
		boolean resultado = participante.insereDados(modelo);

		// Verifica resultado
		if (resultado) {

			return "resultado.xhtml?faces-redirect=true";

		} else {
			return null;
		}

	}

}

IParticipanteDao

package org.desenvolvimento.aberto.dao;

import java.util.List;

import org.desenvolvimento.aberto.Modelo.CargoModelo;
import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;

public interface IParticipanteDao {

	// Define método abstrato

	boolean insereDados(ParticipanteModelo participante);
	public List<CargoModelo> listacargos();
}

ParticipanteDao

package org.desenvolvimento.aberto.dao;

import java.util.List;

import org.hibernate.Session;
import org.desenvolvimento.aberto.Factory.*;
import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;
import org.desenvolvimento.aberto.Modelo.CargoModelo;

public class ParticipanteDao implements IParticipanteDao {

	@Override
	public boolean insereDados(ParticipanteModelo participante) {

		// Declara variável de resultado
		int resultado = 0;

		// Cria sessão
		Session session = DBConexaoFactory.getSessionFactory().openSession();

		// Cria transação
		session.beginTransaction();

		// Persiste dados
		resultado = (Integer) session.save(participante);

		// Confirma e encerra transação
		session.getTransaction().commit();

		// Retorna resultado
		if (resultado != 0) {
			return true;
		} else {
			return false;
		}

	}

	@Override
	public List<CargoModelo> listacargos() {
		List<CargoModelo> itens = null;

		// Cria sessão
		Session session = DBConexaoFactory.getSessionFactory().openSession();

		// Cria transação
		session.beginTransaction();

		// Recupera dados
		String sql = "FROM CargoModelo";

		itens = session.createQuery(sql).list();

		// Confirma e encerra transação
		session.getTransaction().commit();

		return itens;

	}

}

DBConexaoFactory

package org.desenvolvimento.aberto.Factory;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DBConexaoFactory {

	private static final SessionFactory sessionFactory = buildSessionFactory();

	// Constroi sessão
	@SuppressWarnings("deprecation")
	private static SessionFactory buildSessionFactory() {
		try {
			// buildSessionFactory não será utilizado em versões superiores
			// Veremos outros métodos para criar um Factory
			// Não é necessário incluir o "hibernate.cfg.xml" no configure()
			// Incluímos somente a nível de fácil entendimento da chamada da
			// configuração.
			// Você pode retirar a chamada.
			return new Configuration().configure("hibernate.cfg.xml")
					.buildSessionFactory();
		} catch (Throwable ex) {
			// Em caso de erro
			System.err.println("Initial SessionFactory creation failed." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	// Retorna Factory da sessão
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	// Encerra Sessão
	public static void shutdown() {
		getSessionFactory().close();
	}

}

CargoModelo

package org.desenvolvimento.aberto.Modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "CARGO")
public class CargoModelo {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CARGO")
	@SequenceGenerator(name = "SEQ_CARGO", sequenceName = "SEQ_CARGO")
	@Column(name = "ID_CARGO")
	private int id_cargo;

	@Column(name = "DESC_CARGO")
	private String cargo;

	// Métodos Getter & Setter
	public int getId_cargo() {
		return id_cargo;
	}

	public void setId_cargo(int id_cargo) {
		this.id_cargo = id_cargo;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

}

ParticipanteModelo

package org.desenvolvimento.aberto.Modelo;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "PARTICIPANTE")
public class ParticipanteModelo {

	// Define atributos privados

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="SEQ_PARTICIPANTE")
	@SequenceGenerator(name="SEQ_PARTICIPANTE", sequenceName="SEQ_PARTICIPANTE")
	@Column(name = "ID_PART")
	private int id;

	@Column(name = "NOME")
	private String nome;

	@Column(name = "SOBRENOME")
	private String sobrenome;

	@Column(name = "ID_CARGO")
	private int cargo;

	@Column(name = "DATA_ADMISSAO")
	private Date data;

	@Column(name = "SALARIO")
	private double salario;

	@Column(name = "GENERO")
	private String genero;

	@Column(name = "ATIVO")
	private String ativo;

	@Column(name = "OBSERVACAO")
	private String observacao;

	// Metodos Getter e Setter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public int getCargo() {
		return cargo;
	}

	public void setCargo(int cargo) {
		this.cargo = cargo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero;
	}

	public String getAtivo() {
		return ativo;
	}

	public void setAtivo(String ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

}

Index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Hibernate - Oracle Database" />
	</h3>
	<h:form>
		<fieldset style="padding: 10px">

			<legend style="padding: 5px">Cadastro:</legend>

			<h:panelGrid columns="3" cellpadding="2px">

				<h:outputText id="lnome" value="Nome:" />
				<h:inputText id="tnome" value="#{Participante.nome}" size="30"
					required="true" label="Nome"
					requiredMessage="#{msg['requerido.nome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>
				<h:message for="tnome" style="color:red" />

				<h:outputText id="lsobrenome" value="Sobrenome:" />
				<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
					size="40" required="true" label="Sobrenome"
					requiredMessage="#{msg['requerido.sobrenome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>

				<h:message for="tsobrenome" style="color:red" />

				<h:outputText id="lcargo" value="Cargo" />
				<h:selectOneMenu id="tcargo" style="width:210px"
					value="#{Participante.cargo}" required="true"
					requiredMessage="#{msg['requerido.cargo']}">
					<f:selectItem itemLabel=" - Selecione uma opção - " itemValue=""/>
					<f:selectItems value="#{Participante.cargoItem}" />
				</h:selectOneMenu>

				<h:message for="tcargo" style="color:red" />

				<h:outputText id="ldata" value="Data de Admissão" />
				<h:inputText value="#{Participante.data}" required="true"
					requiredMessage="#{msg['requerido.data']}">
					<f:convertDateTime pattern="dd/mm/yyyy" />
				</h:inputText>

				<h:message for="tdata" style="color:red" />

				<h:outputText id="lsalario" value="Salário" />
				<h:inputText id="tsalario" value="#{Participante.salario}"
					required="true" label="Salário"
					requiredMessage="#{msg['requerido.salario']}"
					validatorMessage="#{msg['validar.salario']}">
					<f:convertNumber currencySymbol="$" type="currency" />
					<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
				</h:inputText>

				<h:message for="tsalario" style="color:red" />

				<h:outputText id="lgenero" value="Sexo" />
				<h:selectOneRadio id="tgenero" value="#{Participante.genero}"
					required="true" requiredMessage="#{msg['requerido.genero']}">
					<f:selectItem itemValue="Masculino" itemLabel="Masculino" />
					<f:selectItem itemValue="Feminino" itemLabel="Feminino" />
				</h:selectOneRadio>

				<h:message for="tgenero" style="color:red" />

				<h:outputText id="lativo" value="Ativo" />
				<h:selectBooleanCheckbox value="#{Participante.ativo}"></h:selectBooleanCheckbox>
				<br />

				<h:outputText id="lobservacao" value="Observação" />
				<h:inputTextarea value="#{Participante.observacao}" rows="7"
					cols="40" />

			</h:panelGrid>

		</fieldset>

		<br />

		<h:commandButton id="submit" action="#{Participante.enviarDados}"
			value="Enviar Dados" />

	</h:form>
</h:body>
</html>

Resultado.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Hibernate - Oracle" />
	</h3>
	<h:panelGrid columns="2">

		<h:outputLabel value="Nome:" />
		<h:outputText value="#{Participante.nome}" />

		<h:outputLabel value="Sobrenome:" />
		<h:outputText value="#{Participante.sobrenome}" />

		<h:outputLabel value="Cargo:" />
		<h:outputText value="#{Participante.cargo}" />

		<h:outputLabel value="Data de Admissão:" />
		<h:outputText value="#{Participante.data}">
			<f:convertDateTime pattern="dd/mm/yyyy" />
		</h:outputText>

		<h:outputLabel value="Salário" />
		<h:outputText value="#{Participante.salario}">
			<f:convertNumber currencySymbol="$" type="currency" />
		</h:outputText>

		<h:outputLabel value="Sexo:" />
		<h:outputText value="#{Participante.genero}" />

		<h:outputLabel value="Ativo:" />
		<h:outputText value="#{Participante.ativo}" />

		<h:outputLabel value="Observacao" />
		<h:outputText value="#{Participante.observacao}" />

	</h:panelGrid>
</h:body>
</html>

 

JSF – Persistência – Hibernate – Oracle – Java

Publicado: 11 de fevereiro de 2015 em Java

O Hibernate ORM permite aos desenvolvedores escrever mais facilmente as aplicações cujos dados sobrevivem ao processo da aplicação. Como um framework Object/Relational Mapping (ORM), o Hibernate está preocupado com a persistência de dados que se aplica aos bancos de dados relacionais via JDBC. Entretanto tenha em mente que utilizar dados em Java é complicado, a maneira como você acessa dados em Java é fundamentalmente diferente da maneira de fazê-lo em um banco de dados relacional. Em Java, você pode navegar de uma associação à um outro nível da rede de objetos. No entanto esta não é uma forma eficiente de recuperar dados de um banco de dados relacional. Você normalmente quer minimizar o número de consultas SQL e assim carregar várias entidades através de associações e selecionar as entidades visadas antes de começar a andar pela rede de objetos.

O Hibernate ORM ajuda de um modo eficiente seu aplicativo alcançar a persistência. Então, Persistência significa simplesmente que nós gostaríamos de que os dados do aplicativo possa sobreviver ao processo de aplicações. Em termos de Java, gostaríamos que o estado de (alguns) dos nossos objetos vivam além do âmbito da JVM para que o mesmo estado esteja disponível mais tarde, ou seja para isto precisamos grava-los e manipula-los em um banco de dados.

Hibernate: http://hibernate.org/

Persistindo Dados no Oracle Database com o Hibernate ORM

1 – Crie uma aplicação web dinâmica JSF com duas páginas XHTML uma de nome index.xhtml e outra de resultado.xhtml. Baixe a ultima versão do framework Hibernate ORM e o descompacte em uma pasta. No Eclipse nas propriedades do projeto em Build Path clique em Add Library, escolha User Library e clique em Next:

JSF - User Library

JSF – User Library

2 – Clique no botão User Library para adicionar uma nova biblioteca:

JSF - Add Biblioteca

JSF – Add Biblioteca

3 – Clique em New e crie um nome para sua biblioteca, geralmente Hibernate adicionado de sua versão:

JSF - New Library

JSF – New Library

4 – Clique em sua biblioteca e adicione os Jars externos localizados na pasta lib/required do Hibernate:

Hibernate - Lib - Required

Hibernate – Lib – Required

5 – Com a biblioteca criada, confirme todas as janelas:

Hibernate - Library

Hibernate – Library

6 – Repita o mesmo processo acima para adicionar o Driver JDBC da Oracle, neste exemplo utilizamos a biblioteca chamada ojdbc7.jar contida na pasta JDBC\lib do Client do Oracle 12c:

Oracle - JDBC - 12c

Oracle – JDBC – 12c

7 – Nas propriedades do projeto adicione as bibliotecas incluídas no projeto ao servidor de aplicação, para fazer isto vá na opção Deployment Assembly e inclua as duas bibliotecas acima ao Deployment, isto fará com que o servidor de aplicação use as bibliotecas à partir da pasta WEB-INF/Lib:

JSF - Deployment Assembly

JSF – Deployment Assembly

8 – Este projeto foi escrito sobre o Pattern J2EE conhecido como DAO, neste caso um projeto mesmo simples necessita de varias classes e de um Pattern auxiliar para a conexão com o banco de dados chamado Factory Method, deste modo o projeto separa suas partes distintas. Utilize a figura abaixo na janela Project Explorer para se orientar sobre a estrutura das packages, classes e arquivos de configuração requeridos:

JSF - Project Explorer

JSF – Project Explorer

9 – Após acrescentar todos os códigos abaixo a cada respectivo arquivo, rode a aplicação. Você pode perceber que o Design Pattern DAO, nos possibilita separar a camada de dados, das regras de negocio e da interface com o usuário. Preencha os dados e clique em enviar para que o Hibernate ORM persista os dados no bando de dados Oracle Database:

JSF - Aplicação

JSF – Aplicação

10 – Assim que os dados são inseridos uma página exibira o resultado:

JSF - Resultado

JSF – Resultado

Exemplo:

Neste exemplo utilizamos o framework de persistência Hibernate ORM para gravar dados no Oracle Database, através de uma aplicação JSF e o servidor de aplicação Apache Tomcat.

Obs: Caso queira saber como utilizar a persistência do framework Hibernate e o Oracle Database através de projetos utilizando o Apache Maven clique aqui.

Oracle – SQL

-- Desenvolvimento Aberto - Oracle
-- Cria Sequence
CREATE SEQUENCE SEQ_PARTICIPANTE
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

-- Cria tabela e PK
CREATE TABLE PARTICIPANTE 
(
  ID_PART INTEGER NOT NULL 
, NOME VARCHAR2(30) NOT NULL 
, SOBRENOME VARCHAR2(70) NOT NULL 
, CARGO VARCHAR2(30) NOT NULL 
, DATA_ADMISSAO DATE NOT NULL 
, SALARIO NUMBER(9,2) NOT NULL 
, GENERO VARCHAR2(20) NOT NULL 
, ATIVO CHAR(5) NOT NULL 
, OBSERVACAO VARCHAR2(255) 
, CONSTRAINT PARTICIPANTE_PK PRIMARY KEY 
  (
    ID_PART
  )
  ENABLE 
);

Java

org.desenvolvimento.aberto

Participante

package org.desenvolvimento.aberto;

import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;
import org.desenvolvimento.aberto.dao.ParticipanteDao;

// Define decoradores
@ManagedBean(name = "Participante")
@SessionScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Date data;
	private double salario;
	private String genero;
	private boolean ativo;
	private String observacao;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	
	// Grava Dados usando Hibernate
	// Você pode criar um modelo de dados para este Managed Bean
	// Optamos por usar o próprio objeto através da referencia This
	
	public String enviarDados()
	{
		// Cria objeto DAO
		ParticipanteDao participante = new ParticipanteDao();
		
		// cria objeto Modelo
		ParticipanteModelo modelo = new ParticipanteModelo();
		
		// Transfere dados ao objeto
		modelo.setNome(this.getNome());
		modelo.setSobrenome(this.getSobrenome());
		modelo.setCargo(this.getCargo());
		modelo.setData(this.getData());
		modelo.setSalario(this.getSalario());
		modelo.setGenero(this.getGenero());
		modelo.setAtivo(String.valueOf(this.isAtivo()));
		modelo.setObservacao(this.getObservacao())
		;
		// Você pode criar  
		boolean resultado = participante.insereDados(modelo);
		
		// Verifica resultado
		if (resultado){
		 
			return "resultado.xhtml?faces-redirect=true";
			
		}
		else
		{
			return null;
		}
		
		
	}

}

org.desenvolvimento.aberto.dao

IParticipanteDao

package org.desenvolvimento.aberto.dao;


import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;

public interface IParticipanteDao {
	
	// Define método abstrato

	boolean insereDados(ParticipanteModelo participante);

}

ParticipanteDao

package org.desenvolvimento.aberto.dao;

import org.hibernate.Session;
import org.desenvolvimento.aberto.Factory.*;
import org.desenvolvimento.aberto.Modelo.ParticipanteModelo;

public class ParticipanteDao implements IParticipanteDao {

	@Override
	public boolean insereDados(ParticipanteModelo participante) {

		// Declara variável de resultado
		int resultado = 0;

		// Cria sessão
		Session session = DBConexaoFactory.getSessionFactory().openSession();

		// Cria transação
		session.beginTransaction();

		// Persiste dados
		resultado = (Integer) session.save(participante);

		// Confirma e encerra transação
		session.getTransaction().commit();

		// Retorna resultado
		if (resultado != 0) {
			return true;
		} else {
			return false;
		}

	}

}

org.desenvolvimento.aberto.Factory

DBConexaoFactory

package org.desenvolvimento.aberto.Factory;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DBConexaoFactory {

	private static final SessionFactory sessionFactory = buildSessionFactory();

	// Constroi sessão
	@SuppressWarnings("deprecation")
	private static SessionFactory buildSessionFactory() {
		try {
			// buildSessionFactory não será utilizado em versões superiores
			// Veremos outros métodos para criar um Factory
			// Não é necessário incluir o "hibernate.cfg.xml" no configure()
			// Incluímos somente a nível de fácil entendimento da chamada da
			// configuração.
			// Você pode retirar a chamada.
			return new Configuration().configure("hibernate.cfg.xml")
					.buildSessionFactory();
		} catch (Throwable ex) {
			// Em caso de erro
			System.err.println("Initial SessionFactory creation failed." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	// Retorna Factory da sessão
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	// Encerra Sessão
	public static void shutdown() {
		getSessionFactory().close();
	}

}

org.desenvolvimento,aberto.Modelo

package org.desenvolvimento.aberto.Modelo;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "PARTICIPANTE")
public class ParticipanteModelo {

	// Define atributos privados

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="SEQ_PARTICIPANTE")
	@SequenceGenerator(name="SEQ_PARTICIPANTE", sequenceName="SEQ_PARTICIPANTE")
	@Column(name = "ID_PART")
	private int id;

	@Column(name = "NOME")
	private String nome;

	@Column(name = "SOBRENOME")
	private String sobrenome;

	@Column(name = "CARGO")
	private String cargo;

	@Column(name = "DATA_ADMISSAO")
	private Date data;

	@Column(name = "SALARIO")
	private double salario;

	@Column(name = "GENERO")
	private String genero;

	@Column(name = "ATIVO")
	private String ativo;

	@Column(name = "OBSERVACAO")
	private String observacao;

	// Metodos Getter e Setter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero;
	}

	public String getAtivo() {
		return ativo;
	}

	public void setAtivo(String ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

}

Resources – application.properties

# -- welcome --
welcomeTitle=Desenvolvimento Aberto
requerido.nome=O campo nome é obrigátorio.
requerido.sobrenome=O campo sobrenome é obrigátorio.
requerido.cargo=O campo cargo é obrigátorio.
requerido.data=O campo data de admissão é obrigátorio.
requerido.genero=O campo genero é obrigátorio.
requerido.salario =O campo salário é obrigatório.
validar.salario =O salário não pode ser menor que o valor minimo atual.

Configuração – hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
 
<mapping class="org.desenvolvimento.aberto.Modelo.ParticipanteModelo" />
 
</session-factory>
</hibernate-configuration> 

JSF – Java Server Faces

index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Hibernate - Oracle Database" />
	</h3>
	<h:form>
		<fieldset style="padding: 10px">

			<legend style="padding: 5px">Cadastro:</legend>

			<h:panelGrid columns="3" cellpadding="2px">

				<h:outputText id="lnome" value="Nome:" />
				<h:inputText id="tnome" value="#{Participante.nome}" size="30"
					required="true" label="Nome"
					requiredMessage="#{msg['requerido.nome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>
				<h:message for="tnome" style="color:red" />

				<h:outputText id="lsobrenome" value="Sobrenome:" />
				<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
					size="40" required="true" label="Sobrenome"
					requiredMessage="#{msg['requerido.sobrenome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>

				<h:message for="tsobrenome" style="color:red" />

				<h:outputText id="lcargo" value="Cargo" />
				<h:selectOneMenu id="tcargo" style="width:210px"
					value="#{Participante.cargo}" required="true"
					requiredMessage="#{msg['requerido.cargo']}">
					<f:selectItem itemValue="Vocalista" itemLabel="Vocalista" />
					<f:selectItem itemValue="Guitarrista" itemLabel="Guitarrista" />
					<f:selectItem itemValue="Baixista" itemLabel="Baixista" />
					<f:selectItem itemValue="Baterista" itemLabel="Baterista" />
					<f:selectItem itemValue="Gerente" itemLabel="Gerente de Projetos" />
					<f:selectItem itemValue="" itemLabel="" />
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:selectOneMenu>

				<h:message for="tcargo" style="color:red" />

				<h:outputText id="ldata" value="Data de Admissão" />
				<h:inputText value="#{Participante.data}" required="true"
					requiredMessage="#{msg['requerido.data']}">
					<f:convertDateTime pattern="dd/mm/yyyy" />
				</h:inputText>

				<h:message for="tdata" style="color:red" />

				<h:outputText id="lsalario" value="Salário" />
				<h:inputText id="tsalario" value="#{Participante.salario}"
					required="true" label="Salário"
					requiredMessage="#{msg['requerido.salario']}"
					validatorMessage="#{msg['validar.salario']}">
					<f:convertNumber currencySymbol="$" type="currency" />
					<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
				</h:inputText>

				<h:message for="tsalario" style="color:red" />

				<h:outputText id="lgenero" value="Sexo" />
				<h:selectOneRadio id="tgenero" value="#{Participante.genero}"
					required="true" requiredMessage="#{msg['requerido.genero']}">
					<f:selectItem itemValue="Masculino" itemLabel="Masculino" />
					<f:selectItem itemValue="Feminino" itemLabel="Feminino" />
				</h:selectOneRadio>

				<h:message for="tgenero" style="color:red" />

				<h:outputText id="lativo" value="Ativo" />
				<h:selectBooleanCheckbox value="#{Participante.ativo}"></h:selectBooleanCheckbox>
				<br />

				<h:outputText id="lobservacao" value="Observação" />
				<h:inputTextarea value="#{Participante.observacao}" rows="5"
					cols="30" />

			</h:panelGrid>

		</fieldset>

		<br />

		<h:commandButton id="submit" action="#{Participante.enviarDados}"
			value="Enviar Dados" />

	</h:form>
</h:body>
</html>

resultado.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Hibernate - Oracle" />
	</h3>
	<h:panelGrid columns="2">

		<h:outputLabel value="Nome:" />
		<h:outputText value="#{Participante.nome}" />

		<h:outputLabel value="Sobrenome:" />
		<h:outputText value="#{Participante.sobrenome}" />

		<h:outputLabel value="Cargo:" />
		<h:outputText value="#{Participante.cargo}" />

		<h:outputLabel value="Data de Admissão:" />
		<h:outputText value="#{Participante.data}">
			<f:convertDateTime pattern="dd/mm/yyyy" />
		</h:outputText>

		<h:outputLabel value="Salário" />
		<h:outputText value="#{Participante.salario}">
			<f:convertNumber currencySymbol="$" type="currency" />
		</h:outputText>

		<h:outputLabel value="Sexo:" />
		<h:outputText value="#{Participante.genero}" />

		<h:outputLabel value="Ativo:" />
		<h:outputText value="#{Participante.ativo}" />

		<h:outputLabel value="Observacao" />
		<h:outputText value="#{Participante.observacao}" />

	</h:panelGrid>
</h:body>
</html>

JSF – Facelets – Elementos UI – Java

Publicado: 2 de fevereiro de 2015 em Java

O termo Facelets refere-se a linguagem de declaração da visão para a tecnologia JavaServer Faces. O Facelet é uma linguagem de declaração de página poderosa, mas leve, que é usada para construir visões JSF usando modelos HTML para construir árvores de componentes. Ou seja com o elementos Facelets chamados através da marcação UI você pode criar Templates que facilitam a padronização de uma aplicação Java Enterprise. Em suma, o uso de Facelets reduz o tempo e esforço que precisa ser gasto no desenvolvimento e implantação de aplicações empresariais.

JSF – Elementos – Facelets – ui

  • <ui:insert> define conteúdos a serem colocados em um modelo.
  • <ui:include> Inclui conteúdo de uma página para outra página xhtml.
  • <ui:composition> Carrega um modelo usando o atributo do modelo.
  • <ui:define> Define os conteúdos a serem inseridos em um modelo.

Criando um Template usando Facelets

1 – Crie uma aplicação Web dinâmica JSF, Crie uma nova pagina XHTML e escolha o Template disponibilizado Common Facelet Page e a nomeie de facecomum.xhtml:

Facelets - Common Facelet Page

Facelets – Common Facelet Page

2 -Como você pode ver o Eclipse disponibilizou uma página com um template contendo um Header e um Body:

Facelets - Template - Header - Body

Facelets – Template – Header – Body

3 – Crie mais duas paginas XHTML utilizando o modelo Blank Facelet Page e nomeie as páginas de header.xhtml e conteúdo.xhtml:

Facelet - Blanck Facelet Page

Facelet – Blanck Facelet Page

4 – Neste ponto criamos uma pagina comum, use os códigos abaixo para as respectivas páginas que já foram criadas, teste a pagina facecomum.xhtm, está é sua comum, a página contém um cabeçalho e um conteúdo, você pode utilizar também um rodapé se preferir, você pode usar sua criatividade e expandir o modelo que será usado em todas as páginas de sua aplicação:

Facelets - Página Comum

Facelets – Página Comum

5 – Agora que já temos um modelo, crie mais duas paginas XHTML para serem as paginas de sua aplicação, as nomeie de pagina01.xhtml e pagina02.xhtml e use a pagina index.xhtml que foi criada automaticamente junto com seu projeto para que seja a pagina principal. Você deve ter a seguinte aplicação:

Facelets - Aplicação - index

Facelets – Aplicação – index

6 – Assim que você clicar no link que chama um conteúdo ele será exibido usando o nome de definição da região do Template para substituir o modelo comum pela pagina atual:

Facelets - Página 01

Facelets – Conteúdo Página 01

7 – A mesma coisa acontece quando você retorna a pagina índice e clica no link do segundo conteúdo:

Facelets- Conteúdo Página 02

Facelets- Conteúdo Página 02

Exemplo:

Neste exemplo criamos um Template usando Facelets para criar uma pagina comum e seus conteúdos usados para substituir os elementos do Template durante o uso da aplicação.

Java

Facelets Template- facecomum.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<head>
<title><ui:insert name="pageTitle">Page Title</ui:insert></title>
<style type="text/css">
body {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 14px;
}

.header {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 18px;
}

.bottom {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 9px;
	text-align: center;
	vertical-align: middle;
	color: #8E969D;
}
</style>
</head>

<body bgcolor="#ffffff">
	<table style="border: 1px solid #CAD6E0" align="center" cellpadding="0"
		cellspacing="0" border="0" width="400">
		<tbody>

			<tr>
				<td class="header" height="42" align="center" valign="middle"
					width="100%" bgcolor="#E4EBEB"><ui:insert name="pageHeader">
						<ui:include src="header.xhtml" />

					</ui:insert></td>
			</tr>
			<tr>
				<td height="1" width="100%" bgcolor="#CAD6E0"></td>
			</tr>

			<tr>
				<td width="100%" colspan="2">
					<table width="100%" style="height: 150px" align="left"
						cellpadding="0" cellspacing="0" border="0">
						<tbody>
							<tr>
								<td align="center" width="100%" valign="middle"><ui:insert
										name="body">
										<ui:include src="conteudo.xhtml" />
									</ui:insert></td>
							</tr>
						</tbody>
					</table>
				</td>
			</tr>

			<tr>
				<td colspan="2" valign="bottom" height="1" width="100%"
					bgcolor="#CAD6E0"></td>
			</tr>
		</tbody>
	</table>
</body>

</html>

Facelets Template – header.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<ui:composition>
	<h1>Desenvolvimento Aberto</h1>
</ui:composition>
</html>

Facelets Template- conteudo.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<ui:composition>
	<h1>Meu Conteudo.</h1>
</ui:composition>
</html>

JSF- index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>
<h:body>
	<ui:composition template="facecomum.xhtml">
		<ui:define name="body">
			<br />
			<br />
			<h:panelGrid cellpadding="20px">
				<h:link value="Meu Conteudo 1" outcome="pagina01" />
				<h:link value="Meu Conteudo 2" outcome="pagina02" />
			</h:panelGrid>
			<br />
			<br />
		</ui:define>
	</ui:composition>
</h:body>
</html>

JSF – pagina01.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<h:body>
	<ui:composition template="facecomum.xhtml">
		<ui:define name="header">
			<h2>header</h2>
		</ui:define>
		<ui:define name="body">
			<h2>Conteudo da Página 01</h2>
			<h:link value="Volar a página inicial" outcome="index" />
		</ui:define>
	</ui:composition>
</h:body>
</html>

JSF – pagina02.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">

<h:body>
	<ui:composition template="facecomum.xhtml">
		<ui:define name="header">
			<h2>header</h2>
		</ui:define>
		<ui:define name="body">
			<h2>Conteudo da Página 02</h2>
			<h:link value="Volar a página inicial" outcome="index" />
		</ui:define>
	</ui:composition>
</h:body>

</html>

JSF – Elementos – HTML e Core – Java

Publicado: 2 de fevereiro de 2015 em Java

Você pode utilizar os elementos HTML e Core disponibilizados pelos JSF para criar uma interface gráfica poderosa e completa sem precisar escrever códigos Java. O JSF suporta todos os componentes de IU entretanto pode ser turbinado utilizando frameworks adicionais como o PrimeFaces, RichFaces e BootsFaces, para que você utilize a ultima palavra em componentes ricos para suas interfaces de usuário Java EE.

JSF Elementos HTML – h 

  • <h:outputText> Processa um texto HTML.
  • <h:inputText> Processa uma entrada HTML do tipo = “text“, caixa de texto.
  • <h:commandButton> Processa um input type = HTML do botão “enviar”.
  • <h:selectOneMenu> Processa uma caixa de combinação HTML (ComboBox).
  • <h:selectOneRadio> Processa um único botão de opção HTML.
  • <h:selectBooleanCheckbox> Processa uma caixa única de seleção HTML.
  • <h:inputTextarea> Processa um campo de área para texto HTML.
  • <h:panelGrid> Processa uma tabela HTML em forma de grade.
  • <h:message> Processa mensagem para um componente de interface JSF.

JSF – Elementos – Core – f

  • <f:loadBundle> Carrega um pacote de recursos para a localidade da visão atual e armazena-o como um Mapa no escopo de solicitação
  • <f:validateRegex> Valida componente JSF com uma expressão regular.
  • <f:validateDoubleRange> Valida gama de valor flutuante.
  • <f:selectItem> Adiciona item selecionável em um campo de seleção.
  • <f:convertDateTime> Converte uma string em uma data de formato desejado.
  • <f:convertNumber> Converte uma string em um número de formato desejado.

 Criando um Formulário JSF

1 – Crie uma aplicação web dinâmica JSF e utilize o código abaixo para rodar sua aplicação no servidor de aplicação de sua preferencia:

JSF - HTML e Core

JSF – HTML e Core

2- Preencha os dados no formulário e os envie para ver o resultado.

JSF - Resultado

JSF – Resultado

Exemplo:

Neste exemplo criamos um formulário e exibimos seu resultado através do elementos do framework JSF.

Managed JavaBean  – Participante

package org.desenvolvimento.aberto;

import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Date data;
	private double salario;
	private String genero;
	private boolean ativo;
	private String observacao;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

}

Index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Cadastros:" />
	</h3>
	<h:form>
		<fieldset style="padding: 10px">

			<legend style="padding: 5px">Cadastro:</legend>

			<h:panelGrid columns="3" cellpadding="2px">

				<h:outputText id="lnome" value="Nome:" />
				<h:inputText id="tnome" value="#{Participante.nome}" size="30"
					required="true" label="Nome"
					requiredMessage="#{msg['requerido.nome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>
				<h:message for="tnome" style="color:red" />

				<h:outputText id="lsobrenome" value="Sobrenome:" />
				<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
					size="40" required="true" label="Sobrenome"
					requiredMessage="#{msg['requerido.sobrenome']}">
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:inputText>

				<h:message for="tsobrenome" style="color:red" />

				<h:outputText id="lcargo" value="Cargo" />
				<h:selectOneMenu id="tcargo" style="width:210px"
					value="#{Participante.cargo}" required="true"
					requiredMessage="#{msg['requerido.cargo']}">
					<f:selectItem itemValue="Vocalista" itemLabel="Vocalista" />
					<f:selectItem itemValue="Guitarrista" itemLabel="Guitarrista" />
					<f:selectItem itemValue="Baixista" itemLabel="Baixista" />
					<f:selectItem itemValue="Baterista" itemLabel="Baterista" />
					<f:selectItem itemValue="" itemLabel="" />
					<f:validateRegex pattern="[a-zA-Z]+" />
				</h:selectOneMenu>

				<h:message for="tcargo" style="color:red" />

				<h:outputText id="ldata" value="Data de Admissão" />
				<h:inputText value="#{Participante.data}" required="true"
					requiredMessage="#{msg['requerido.data']}">
					<f:convertDateTime pattern="dd/mm/yyyy" />
				</h:inputText>

				<h:message for="tdata" style="color:red" />

				<h:outputText id="lsalario" value="Salário" />
				<h:inputText id="tsalario" value="#{Participante.salario}"
					required="true" label="Salário"
					requiredMessage="#{msg['requerido.salario']}"
					validatorMessage="#{msg['validar.salario']}">
					<f:convertNumber currencySymbol="$" type="currency" />
					<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
				</h:inputText>

				<h:message for="tsalario" style="color:red" />

				<h:outputText id="lgenero" value="Sexo" />
				<h:selectOneRadio id="tgenero" value="#{Participante.genero}"
					required="true" requiredMessage="#{msg['requerido.genero']}">
					<f:selectItem itemValue="Masculino" itemLabel="Masculino" />
					<f:selectItem itemValue="Feminino" itemLabel="Feminino" />
				</h:selectOneRadio>

				<h:message for="tgenero" style="color:red" />

				<h:outputText id="lativo" value="Ativo" />
				<h:selectBooleanCheckbox value="#{Participante.ativo}"></h:selectBooleanCheckbox>
				<br />

				<h:outputText id="lobservacao" value="Observação" />
				<h:inputTextarea value="#{Participante.observacao}" rows="5"
					cols="30" />

			</h:panelGrid>

		</fieldset>

		<br />

		<h:commandButton id="submit" action="resultado.xhtml"
			value="Enviar Dados" />

	</h:form>
</h:body>
</html>

Resultado.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome"
			value="Java Server Faces- Elementos de Formulário - Resultado" />
	</h3>
	<h:panelGrid columns="2">

		<h:outputLabel value="Nome:" />
		<h:outputText value="#{Participante.nome}" />

		<h:outputLabel value="Sobrenome:" />
		<h:outputText value="#{Participante.sobrenome}" />

		<h:outputLabel value="Cargo:" />
		<h:outputText value="#{Participante.cargo}" />

		<h:outputLabel value="Data de Admissão:" />
		<h:outputText value="#{Participante.data}">
			<f:convertDateTime pattern="dd/mm/yyyy" />
		</h:outputText>

		<h:outputLabel value="Salário" />
		<h:outputText value="#{Participante.salario}">
			<f:convertNumber currencySymbol="$" type="currency" />
		</h:outputText>

		<h:outputLabel value="Sexo:" />
		<h:outputText value="#{Participante.genero}" />

		<h:outputLabel value="Ativo:" />
		<h:outputText value="#{Participante.ativo}" />

		<h:outputLabel value="Observacao" />
		<h:outputText value="#{Participante.observacao}" />

	</h:panelGrid>
</h:body>
</html>

Application.properties

# -- welcome --
welcomeTitle=Desenvolvimento Aberto
requerido.nome=O campo nome é obrigátorio.
requerido.sobrenome=O campo sobrenome é obrigátorio.
requerido.cargo=O campo cargo é obrigátorio.
requerido.data=O campo data de admissão é obrigátorio.
requerido.genero=O campo genero é obrigátorio.
requerido.salario =O campo salário é obrigatório.
validar.salario =O salário não pode ser menor que o valor minimo atual.

JSF – Regex – Regular Expression – Java

Publicado: 26 de janeiro de 2015 em Java

Em ciência da computação teórica e teoria da linguagem formal, uma expressão regular abreviada de Regex ou Regexp e, por vezes chamado de uma expressão racional é uma sequência de caracteres que forma um padrão de pesquisa, principalmente para uso na correspondência de padrões com Strings, ou sequência correspondente, ou seja, como operações de localizar e substituir. O conceito surgiu na década de 1950, quando o matemático americano Stephen Kleene formalizava a descrição de uma linguagem regular, e entrou em uso comum com os utilitários Unix de processamento de texto.

Cada caractere em uma expressão regular ou é entendido como um MetaCharacter com seu significado especial, ou um caractere regular com o seu significado literal. Em conjunto, eles podem ser usados para identificar material textual de um determinado padrão, ou processar um número de instâncias do mesmo que podem variar de uma igualdade exata para uma semelhança muito geral do padrão.

O Regex pode ser usado para analisar rapidamente grandes quantidades de texto para encontrar padrões de caracteres específicos; para extrair, editar, substituir ou excluir substrings de texto, também é comum serem utilizadas para validar campos.

Regular Expression

Existe muito material sobre expressões regulares, inclusive a API de utilidades do Java contempla classes para combinar sequências de caracteres contra padrões especificados por expressões regulares

Regex: http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html

Por outro lado existem alguns sites que proporcionam ótimos materiais sobre Regex e permitem que você crie e teste sua própria expressão regular antes de a utilizar.

RegExr: http://regexr.com/

Expressão regular que contempla caracteres maiúsculos e minúsculos: Pattern [a-zA-Z]+

Regex - [a-zA-Z]+

Regex – [a-zA-Z]+

Expressão regular que contempla números inteiros e flutuantes: Pattern (?:\d*\.)?\d+

Regex - (?:\d*\.)?\d+

Regex – (?:\d*\.)?\d+

Usando Expressões Regulares

1 – Crie uma aplicação web dinâmica JSF e utilize os códigos abaixo:

JSF - Validando Expressões Regulares

JSF – Validando Expressões Regulares

Exemplo:

Neste exemplo utilizamos expressões regulares para validar o conteúdo dos campos de uma aplicação JSF. Na aplicação se um campo de texto conter caracteres que não correspondem a expressão serão automaticamente invalidados.

Java

Managed Bean – Participante

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Double getSalario() {
		return salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

JSF – index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>

</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome">
				<f:validateRegex pattern="[a-zA-Z]+" />
			</h:inputText>
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome">
				<f:validateRegex pattern="[a-zA-Z]+" />
			</h:inputText>
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo">
				<f:validateRegex pattern="[a-zA-Z]+" />
			</h:inputText>
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário"
				requiredMessage="#{msg['requerido.salario']}"
				validatorMessage="#{msg['validar.salario']}">
				<f:validateRegex pattern="(?:\d*\.)?\d+" />
				<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
			</h:inputText>

			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />

		<div id="meulog"></div>
	</h:form>
</h:body>
</html>

JSF – Usando Javascript – Java

Publicado: 20 de janeiro de 2015 em Java, JavaScript

O h:outputScript apresenta um elemento HTML do tipo script como um javascript. Está tag é usada para adicionar javascript de um arquivo externo em uma página JSF. Você pode colocar arquivos de script em um diretório de recursos na raiz da sua aplicação web. Subdiretórios deste diretório são chamados de bibliotecas, você pode criar todas as bibliotecas como quiser, como por exemplo uma biblioteca de imagens, de javascripts ou arquivos css.

h:outputScript: https://javaserverfaces.java.net/docs/2.2/vdldocs/facelets/h/outputScript.html

Usando uma Biblioteca Externa

1 – Crie um projeto web dinâmico JSF e na pasta WebContent crie uma pasta chamada resources e dentro dela as pastas, images, js e css:

JSF - WebContent

JSF – WebContent

2 – Na pasta js crie um novo arquivo javascript de acordo com o código abaixo:

JSF - Javascript

JSF – Javascript

3 – Na pagina xhtml na tag Head utilize o outputScript e alimente os parâmetros para o nome do arquivo e sua pasta no qual é a biblioteca javascript está localizada, crie um elemento DIV no final da pagina no qual o Javacript adicionará o resultado dos eventos disparados e por fim adicione os eventos no elemento de texto do campo nome:

JSF - Aplicação

JSF – Aplicação

Exemplo:

Neste exemplo utilizamos um arquivo javascript externo para criar a funcionalidade para os evento de entrada e saída do mouse sobre um elemento de entrada de texto.

Java

Managed Bean – Participante

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Double getSalario() {
		return salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

Index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
<h:outputScript name="testejs.js" library="js"></h:outputScript>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" onmouseover="meuMouseOver()"
				onmouseout="meuMouseOut()" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário"
				requiredMessage="#{msg['requerido.salario']}"
				validatorMessage="#{msg['validar.salario']}">

				<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
			</h:inputText>

			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />

		<div id="meulog"></div>
	</h:form>
</h:body>
</html>

Javascript – testejs001.js

function meuMouseOver()
{
	var div = document.getElementById('meulog');

	div.innerHTML = div.innerHTML + 'Você entrou no campo nome ';
}

function meuMouseOut()
{
	var div = document.getElementById('meulog');

	div.innerHTML = div.innerHTML + 'Você saiu do campo nome ';
}

JSF – Validations – Java

Publicado: 19 de janeiro de 2015 em Java

As validações permitem que você adicione uma validação de modo que quando um usuário editar ou inserir dados em um campo e enviar o formulário, os dados serão validados contra todas as regras e condições estabelecidas. Se a validação falhar, o aplicativo exibe uma mensagem de erro. Você pode utilizar as tags do JSF Core (f) para trabalhar com validações dos elementos do JSF HTML (h), executando assim validações de vários tipos sobre os dados alimentados pelos usuários de sua aplicação.

Validações JFS (f) Core

  1. f: ValidateLength – Valida comprimento de uma string.
  2. f: validateLongRange – Valida gama de valor numérico.
  3. f: validateDoubleRange – Valida gama de valor flutuante.
  4. f: validateRegex – Validar componente JSF com uma determinada expressão regular.

Ainda é possível que você crie suas próprias validações customizadas implementando sua classe com a interface javax.faces.validator.

Validação: ValidateDoubleRange

Validando Campos de Entrada

1- Crie uma aplicação web dinâmica JSF. Vamos utilizar as propriedades para customizar as mensagens que vamos emitir para a interface do usuário, abra as propriedades de sua aplicação e as modifique de acordo com  a figura abaixo:

JSF - Properties - Mensagens

JSF – Properties – Mensagens

3 – Utilize os códigos abaixo para criar os arquivos de sua aplicação. Criaremos um Managed Bean com um detalhe para o campo salário, ao invés de utilizarmos um tipo double primitivo vamos utilizar a classe Double para armazenar o valor no qual será manipulado pela UI da página utilizando elementos do JSF Core para a validação:

JSF - validateDoubleRange

JSF – validateDoubleRange

4 – Na tag de validação de alcance, definimos um valor máximo e um valor mínimo para a entrada do usuário, se o valor inserido não satisfazer as regras aplicadas então a mensagem definida será exibida.

JSF - Validation

JSF – Validation

Exemplo:

Neste exemplo definimos dois tipos de validação para o campo salário, no qual primeiro o definimos como campo obrigatório e por fim definimos um valor mínimo e um valor máximo para o salário. Este é um exemplo fictício de como deve funcionar as validações na UI, em um ambiente profissional este tipo de validação para salário não deve ser feita diretamente na interface de usuário e sim na camada de negocio de sua aplicação.

Java

Participante – Managed Bean

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Double getSalario() {
		return salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

Html – index.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário"
				requiredMessage="#{msg['requerido.salario']}"
				validatorMessage="#{msg['validar.salario']}">

				<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
			</h:inputText>

			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />
	</h:form>
</h:body>
</html>

Application.properties

# -- welcome --
welcomeTitle=Desenvolvimento Aberto
requerido.salario =O campo salário é obrigatório.
validar.salario =O salário não pode ser menor que o valor minimo atual.