ola galera, alguem teria algum exemplo de uma pagina master detail com jsf ?
nao sei ao certo com fazer a tela de cadastro com master detail.
eu tenho uma tabela pessoa e outra comissao
as entidades estao assim…
Vendedor.java
package org.smartgestor.cadastro;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
@ManagedBean
@SessionScoped
@Entity
@Table(name="vendedor")
@DiscriminatorValue(value="V")
public class Vendedor extends Pessoa {
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(name="CPF")
private String cpf;
@Column(name="RG")
private String rg;
@Column(name="celular")
private String celular;
@Column(name="percentualcomissao")
private double percentualDeComissao;
@Column(name="descontomax")
private double descontoMaximo;
@Column(name="tipocomissao")
private String tipoComissao;
@Transient
private boolean aderirPercentual;
@OneToMany(mappedBy="ven",targetEntity=Comissao.class,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
private List<Comissao> comissoes;
public Vendedor(double percentualDeComissao, double descontoMaximo,
String tipoComissao, boolean aderirPercentual) {
super();
this.percentualDeComissao = percentualDeComissao;
this.descontoMaximo = descontoMaximo;
this.tipoComissao = tipoComissao;
this.aderirPercentual = aderirPercentual;
}
public Vendedor() {
super();
}
public double getPercentualDeComissao() {
return percentualDeComissao;
}
public void setPercentualDeComissao(double percentualDeComissao) {
this.percentualDeComissao = percentualDeComissao;
}
public double getDescontoMaximo() {
return descontoMaximo;
}
public void setDescontoMaximo(double descontoMaximo) {
this.descontoMaximo = descontoMaximo;
}
public String getTipoComissao() {
return tipoComissao;
}
public void setTipoComissao(String tipoComissao) {
//System.out.println(tipoComissao);
this.tipoComissao = tipoComissao;
}
public boolean isAderirPercentual() {
return aderirPercentual;
}
public void setAderirPercentual(boolean aderirPercentual) {
this.aderirPercentual = aderirPercentual;
}
public void setComissoes(List<Comissao> comissoes) {
this.comissoes = comissoes;
}
public List<Comissao> getComissoes() {
return comissoes;
}
public void setCelular(String celular) {
this.celular = celular;
}
public String getCelular() {
return celular;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getRg() {
return rg;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getCpf() {
return cpf;
}
}
Comissao.java
package org.smartgestor.cadastro;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
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;
@ManagedBean
@SessionScoped
@Entity
@Table(name="comissao")
@DiscriminatorValue(value="CM")
public class Comissao {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int codigo;
@Column(name="percentualcomissaovista")
private double percentualComissaoAVista;
@Column(name="valorvenda")
private double valorDasVendas;
@Column(name="percentualcomissaoprazo")
private double percentualComissaoAPrazo;
@ManyToOne
@JoinColumn(name="vendedor_id")
private Vendedor ven;
public Comissao() {
// TODO Auto-generated constructor stub
}
public double getPercentualComissaoAVista() {
return percentualComissaoAVista;
}
public void setPercentualComissaoAVista(double percentualComissaoAVista) {
this.percentualComissaoAVista = percentualComissaoAVista;
}
public double getValorDasVendas() {
return valorDasVendas;
}
public void setValorDasVendas(double valorDasVendas) {
this.valorDasVendas = valorDasVendas;
}
public double getPercentualComissaoAPrazo() {
return percentualComissaoAPrazo;
}
public void setPercentualComissaoAPrazo(double percentualComissaoAPrazo) {
this.percentualComissaoAPrazo = percentualComissaoAPrazo;
}
public Comissao(double percentualComissaoAVista, double valorDasVendas,
double percentualComissaoAPrazo) {
super();
this.percentualComissaoAVista = percentualComissaoAVista;
this.valorDasVendas = valorDasVendas;
this.percentualComissaoAPrazo = percentualComissaoAPrazo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public int getCodigo() {
return codigo;
}
public void setVen(Vendedor ven) {
this.ven = ven;
}
public Vendedor getVen() {
return ven;
}
/* public void setVendedor(Vendedor vendedor) {
this.vendedor = vendedor;
}
public Vendedor getVendedor() {
return vendedor;
}*/
}
e na minha pagina de cadastro eu fiz assim:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:composition template="cliente.xhtml">
<ui:define name="corpo">
<p:panel header="Cadastrar Vendedor">
<h:outputText value="Nome Completo"/>
<br/>
<p:inputText id="CliNomeCompleto" value="#{vendedorDAO.vendedorEdit.nomeCompleto}" size="40"/>
<br/>
<h:outputText value="Tipo de endereco"/>
<br/>
<p:selectOneMenu id="TipoEndereco" value="#{vendedorDAO.vendedorEdit.tipoEndereco}">
<f:selectItem itemLabel="..Selecione.."/>
<f:selectItem itemLabel="AEROPORTO" itemValue="AER"/>
<f:selectItem itemLabel="ALAMEDA" itemValue="AL"/>
<f:selectItem itemLabel="APARTAMENTO" itemValue="AP"/>
<f:selectItem itemLabel="AVENIDA" itemValue="AV"/>
<f:selectItem itemLabel="BECO" itemValue="BC"/>
<f:selectItem itemLabel="BLOCO" itemValue="BL"/>
<f:selectItem itemLabel="CAMINHO" itemValue="CAM"/>
<f:selectItem itemLabel="ESCADINHA" itemValue="ESCD"/>
<f:selectItem itemLabel="ESTAÇÃO" itemValue="EST"/>
<f:selectItem itemLabel="ESTRADA" itemValue="ETR"/>
<f:selectItem itemLabel="FAZENDA" itemValue="FAZ"/>
<f:selectItem itemLabel="FORTALEZA" itemValue="FORT"/>
<f:selectItem itemLabel="GALERIA" itemValue="GL"/>
<f:selectItem itemLabel="LADEIRA" itemValue="LD"/>
<f:selectItem itemLabel="LARGO" itemValue="LGO"/>
<f:selectItem itemLabel="PRAÇA" itemValue="PCA"/>
<f:selectItem itemLabel="PARQUE" itemValue="PRQ"/>
<f:selectItem itemLabel="PRAIA" itemValue="PR"/>
<f:selectItem itemLabel="QUADRA" itemValue="QD"/>
<f:selectItem itemLabel="QUILÔMETRO" itemValue="KM"/>
<f:selectItem itemLabel="QUINTA" itemValue="QTA"/>
<f:selectItem itemLabel="RODOVIA" itemValue="ROD"/>
<f:selectItem itemLabel="RUA" itemValue="R"/>
<f:selectItem itemLabel="SUPER QUADRA" itemValue="SQD"/>
<f:selectItem itemLabel="TRAVESSA" itemValue="TRV"/>
<f:selectItem itemLabel="VIADUTO" itemValue="VD"/>
<f:selectItem itemLabel="VILA" itemValue="VL"/>
</p:selectOneMenu>
<br/>
<h:outputText value="Endereco"/>
<br/>
<p:inputText id="CliEndereco" value="#{vendedorDAO.vendedorEdit.endereco}" size="60" />
<br/>
<h:outputText value="Telefone"/>
<br/>
<p:inputText id="Clitel" value="#{vendedorDAO.vendedorEdit.fone}"/>
<br/>
<h:outputText value="Celular"/>
<br/>
<p:inputText id="CliCel" value="#{vendedorDAO.vendedorEdit.celular}" size="35"/>
<br/>
<h:outputText value="Email"/>
<br/>
<p:inputText id="CliEmail" value="#{vendedorDAO.vendedorEdit.email}" size="35"/>
<br/>
<h:outputText value="CPF"/>
<br/>
<p:inputText id="CliLimiteCNPJ" value="#{vendedorDAO.vendedorEdit.cpf}"/>
<br/>
<h:outputText value="RG"/>
<br/>
<p:inputText id="CliIE" value="#{vendedorDAO.vendedorEdit.rg}" size="35"/>
<br/>
<p:fieldset legend="Comissoes" id="comissaoForm">
<!-- Parte de comissoes -->
<h:outputText value="Tipo Comissao"/>
<br/>
<p:selectOneMenu id="tpComissao" value="#{vendedorDAO.vendedorEdit.tipoComissao}">
<p:ajax update="comissaoForm" event="change"/>
<f:selectItem itemLabel="..Selecione.."/>
<f:selectItem itemLabel="Simples" itemValue="S"/>
<f:selectItem itemLabel="Faixa" itemValue="F"/>
</p:selectOneMenu>
<br/>
<hr/>
<br/>
<c:if test="#{vendedorDAO.vendedorEdit.tipoComissao eq 'S'}">
<h:panelGrid columns="2">
<h:outputText value="% Comissao a Vista"/>
<h:outputText value="% Comissao a Prazo" />
<p:inputText value="#{vendedorDAO.vendedorEdit.comissoes.percentualComissaoAVista}" id="cmVista"/>
<p:inputText value="#{vendedorDAO.vendedorEdit.comissoes.percentualComissaoAPrazo}" id="cmPrazo"/>
</h:panelGrid>
</c:if>
<c:if test="#{vendedorDAO.vendedorEdit.tipoComissao eq 'F'}">
<c:set var="cms" value="#{vendedorDAO.vendedorEdit.comissoes}"/>
<h:panelGrid columns="3">
<h:outputText value="Valor da Venda"/>
<h:outputText value="% Comissao a Vista"/>
<h:outputText value="% Comissao a Prazo" />
<p:inputText value="#{vendedorDAO.vendedorEdit.comissoes.valorDasVendas}" id="vlVenda"/>
<p:inputText value="#{vendedorDAO.vendedorEdit.comissoes.percentualComissaoAVista}" id="cmVista"/>
<p:inputText value="#{vendedorDAO.vendedorEdit.comissoes.percentualComissaoAPrazo}" id="cmPrazo"/>
</h:panelGrid>
<p:commandButton value="Adicionar" icon="ui-icon-plusthick"/>
<p:dataTable value="#{vendedorDAO.vendedorEdit.comissoes}" var="cm">
<p:column headerText="Valor Venda">
<h:outputText value="#{cm.valorDasVendas}"/>
</p:column>
<p:column headerText="% a Vista">
<h:outputText value="#{cm.percentualComissaoAVista}"/>
</p:column>
<p:column headerText="% a Prazo">
<h:outputText value="#{cm.percentualComissaoAPrazo}"/>
</p:column>
</p:dataTable>
</c:if>
</p:fieldset>
<hr/>
<p:commandButton type="submit" value="Novo" actionListener="#{vendedorDAO.salvarVendedor}" update="messages" oncomplete="redireciona('addVendedor.faces')">
<f:attribute name="tipopessoa" value="J" />
</p:commandButton>
<p:commandButton type="submit" value="Salvar" actionListener="#{vendedorDAO.salvarVendedor}" update="messages" oncomplete="redireciona('vendedor.faces')">
<f:attribute name="tipopessoa" value="J" />
</p:commandButton>
<h:outputText value=" "/>
<p:commandButton type="reset" value="Limpar Campos" action="#"/>
<h:outputText value=" "/>
<p:commandButton type="button" value="Cancelar" action="#" onclick="redireciona('vendedor.faces')"/>
</p:panel>
</ui:define>
</ui:composition>
</html>
aqui estao VendedorDAO e VendedorFaces
VendedorDAO.java
package org.smartgestor.dao;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.swing.JOptionPane;
import org.primefaces.event.SelectEvent;
import org.smartgestor.cadastro.Comissao;
import org.smartgestor.cadastro.Vendedor;
import org.smartgestor.excessao.PessoaException;
import org.smartgestor.faces.VendedorFaces;
public class VendedorDAO {
private Vendedor vendedorEdit;
public String inicializar (){
vendedorEdit = new Vendedor();
return "Cadastrado";
}
public VendedorDAO(){
this.vendedorEdit = new Vendedor();
}
public void salvarVendedor(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String aux = (String) event.getComponent().getAttributes().get("tipopessoa");
Date data = new Date();
vendedorEdit.setTipopessoa(aux.charAt(0));
vendedorEdit.setDataCadastro(data);
try {
new VendedorFaces().salvar(this.vendedorEdit);
//grava comissoes
for(Comissao c : vendedorEdit.getComissoes())
{
try {
new VendedorFaces().gravaComissoes(c);
} catch (Exception e) {
}
}
this.vendedorEdit = new Vendedor();
FacesMessage msg = new FacesMessage("Vendedor Salvo com Sucesso!");
msg.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage(null, msg);
} catch (PessoaException e) {
context.addMessage(
null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, e
.getMessage(), e.getMessage()));
} catch (Exception e) {
e.printStackTrace();
FacesMessage msg = new FacesMessage(
"Erro inesperado ao salvar o Vendedor!");
JOptionPane.showMessageDialog(null, msg);
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, msg);
}
}
public void removerVendedor(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
try {
new VendedorFaces().excluir(this.vendedorEdit);
this.vendedorEdit = new Vendedor();
FacesMessage msg = new FacesMessage("Vendedor excluido com Sucesso!");
msg.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage(null, msg);
} catch (Exception e) {
e.printStackTrace();
FacesMessage msg = new FacesMessage(
"Erro inesperado ao excluir o Vendedor!");
JOptionPane.showMessageDialog(null, msg);
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, msg);
}
}
public void selecionar(SelectEvent event)
{
this.vendedorEdit = (Vendedor)event.getObject();
}
public Vendedor getVendedorEdit() {
return vendedorEdit;
}
public void setVendedorEdit(Vendedor vendedorEdit) {
this.vendedorEdit = vendedorEdit;
}
}
VendedorFaces.java
package org.smartgestor.faces;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.smartgestor.cadastro.Comissao;
import org.smartgestor.cadastro.Vendedor;
import org.smartgestor.excessao.PessoaException;
import org.smartgestor.util.HibernateUtil;
public class VendedorFaces {
private Vendedor vendedorEdicao;
private int Escolha;
private List<Vendedor> listaVendedor;
public VendedorFaces() {
ListaDeVendedores();
}
public void salvar(Vendedor vendedor) throws PessoaException
{
//Pessoa pessoa = new Pessoa();
if(vendedor.getNomeCompleto().isEmpty() == true){
throw new PessoaException("N�o pode grava com Nome em Branco!");
}
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
session.saveOrUpdate(vendedor);
tx.commit();
}
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
finally
{
session.close();
}
}
public void gravaComissoes(Comissao comissao)
{
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
session.saveOrUpdate(comissao);
tx.commit();
}
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
finally
{
session.close();
}
}
@SuppressWarnings("unchecked")
public void ListaDeVendedores(){
Session session = HibernateUtil.getSession();
try{
this.listaVendedor = session.createCriteria(Vendedor.class).addOrder(Order.asc("id")).list();
}finally{
session.close();
}
}
public void excluir(Vendedor vendedor){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
session.delete(vendedor);
tx.commit();
}
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
finally
{
session.close();
}
}
public Vendedor getVendedorEdicao() {
return vendedorEdicao;
}
public void setVendedorEdicao(Vendedor vendedorEdicao) {
this.vendedorEdicao = vendedorEdicao;
}
public int getEscolha() {
return Escolha;
}
public void setEscolha(int escolha) {
Escolha = escolha;
}
public void setListaVendedor(List<Vendedor> listaVendedor) {
this.listaVendedor = listaVendedor;
}
public List<Vendedor> getListaVendedor() {
return listaVendedor;
}
}
aguardo respostas dos colegas.
Atenciosamente,
