0
I’ve been researching for days and I couldn’t find a solution.
The scenario and the following:
I have an employee registration screen and an employee editing screen with two classes a pessoa
where I have generic property such as name, address and class funcionário
where I have property such as wages, position etc.
It is saved right and displaying in her report for a possible deletion or editing.
My problem is when I’m on the report screen and I click the edit button, it takes me to the registration screen already with the employee data, but the class data pessoa
is not coming.
I managed to do it so far returns in the field name the Id
, more should return the nome
.
Below follows the code made so far:
registration screen
<!DOCTYPE html>
<ui:composition template="/WEB-INF/template/Layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">
<f:metadata>
<o:viewParam name="id" value="#{cadastroFuncionarioBean.funcionario}" />
<f:viewAction action="#{cadastroFuncionarioBean.prepararCadastro}" />
</f:metadata>
<ui:define name="titulo">Cadastro RH</ui:define>
<ui:define name="corpo">
<h1>Cadastro de Funcionários</h1>
<h:form id="frm">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<h3>Dados Pessoais</h3>
<p:panelGrid columns="4">
<p:outputLabel value="Nome" for="nome" />
<p:autoComplete id="nome" size="60"
value="#{cadastroFuncionarioBean.funcionario.pessoa}"
completeMethod="#{cadastroFuncionarioBean.pesquisarNomes}" />
<p:outputLabel value="Cpf" for="cpf" />
<p:autoComplete id="cpf" size="14"
value="#{cadastroFuncionarioBean.funcionario.cpf}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCpfs}" />
<p:outputLabel value="Tipo" for="sexo" />
<p:selectOneButton id="sexo"
value="#{cadastroFuncionarioBean.funcionario.sexo}">
<f:selectItems
value="#{cadastroFuncionarioBean.tiposFuncionarios}"
var="tipoFuncionario" itemValue="#{tipoFuncionario}"
itemLabel="#{tipoFuncionario.sexo}" />
</p:selectOneButton>
</p:panelGrid>
<h3>Endereço</h3>
<p:panelGrid columns="4">
<p:outputLabel value="Endereço" for="endereco" />
<p:autoComplete id="endereco" size="60"
value="#{cadastroFuncionarioBean.pessoa.endereco}"
completeMethod="#{cadastroFuncionarioBean.pesquisarEnderecos}" />
<p:outputLabel value="Numero" for="numero" />
<p:autoComplete id="numero" size="6"
value="#{cadastroFuncionarioBean.pessoa.numero}"
completeMethod="#{cadastroFuncionarioBean.pesquisarNumeros}" />
<p:outputLabel value="Complemento" for="complemento" />
<p:autoComplete id="complemento" size="20"
value="#{cadastroFuncionarioBean.pessoa.complemento}"
completeMethod="#{cadastroFuncionarioBean.pesquisarComplementos}" />
<p:outputLabel value="Bairro" for="bairro" />
<p:autoComplete id="bairro" size="30"
value="#{cadastroFuncionarioBean.pessoa.bairro}"
completeMethod="#{cadastroFuncionarioBean.pesquisarBairros}" />
<p:outputLabel value="Cidade" for="cidade" />
<p:autoComplete id="cidade" size="30"
value="#{cadastroFuncionarioBean.pessoa.cidade}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCidades}" />
<p:outputLabel value="Estado" for="estado" />
<p:autoComplete id="estado" size="2"
value="#{cadastroFuncionarioBean.pessoa.estado}"
completeMethod="#{cadastroFuncionarioBean.pesquisarEstados}" />
<p:outputLabel value="Cep" for="cep" />
<p:autoComplete id="cep" size="9"
value="#{cadastroFuncionarioBean.pessoa.cep}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCeps}" />
</p:panelGrid>
<h3>Dados de Admissão</h3>
<p:panelGrid columns="2">
<p:outputLabel value="Cargo" for="cargo" />
<p:autoComplete id="cargo" size="60"
value="#{cadastroFuncionarioBean.funcionario.cargo}"
completeMethod="#{cadastroFuncionarioBean.pesquisarCargos}" />
<p:outputLabel value="Salário" />
<p:inputText size="12"
value="#{cadastroFuncionarioBean.funcionario.salario}"
label="salario">
<f:convertNumber locale="pt_BR" maxFractionDigits="2"
minFractionDigits="2" />
</p:inputText>
<p:outputLabel value="Data de Admissão" for="dataAdmissao" />
<p:calendar id="dataAdmissao" size="12" pattern="dd/MM/yyyy"
value="#{cadastroFuncionarioBean.funcionario.dataAdmissao}">
<p:ajax event="dateSelect" update="@this dataAdmissao"
process="@this dataAdmissao"
listener="#{cadastroFuncionarioBean.dataAdmissaoAlterada}" />
</p:calendar>
</p:panelGrid>
<p:commandButton value="Salvar"
action="#{cadastroFuncionarioBean.salvar}" icon="ui-icon-disk"
update="@form" />
</h:form>
</ui:define>
</ui:composition>
Report screen for possible deletion or editing
<!DOCTYPE html>
<ui:composition template="/WEB-INF/template/Layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:metadata>
<f:viewAction action="#{consultaFuncionariosBean.consultar}" />
</f:metadata>
<ui:define name="titulo">Consulta do RH</ui:define>
<ui:define name="corpo">
<h1>Consulta de Funcionarios</h1>
<h:form id="frm">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<p:dataTable value="#{consultaFuncionariosBean.funcionarios}"
var="funcionario" border="1" cellspacing="0" cellpadding="2"
paginator="true" rows="5" paginatorPosition="bottom">
<p:column headerText="Pessoa" sortBy="#{funcionario.pessoa.nome}">
<h:outputText value="#{funcionario.pessoa.nome}" />
</p:column>
<p:column headerText="Cargo" sortBy="#{funcionario.cargo}">
<h:outputText value="#{funcionario.cargo}" />
</p:column>
<p:column headerText="Sexo">
<h:outputText value="#{funcionario.sexo}" />
</p:column>
<p:column headerText="Salário" style="text-align: right"
sortBy="#{funcionario.salario}">
<h:outputText value="#{funcionario.salario}">
<f:convertNumber type="currency" locale="pt_BR" />
</h:outputText>
</p:column>
<p:column headerText="Data de Admissão" style="text-align: center"
sortBy="#{funcionario.dataAdmissao}">
<h:outputText value="#{funcionario.dataAdmissao}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="America/Sao_Paulo" />
</h:outputText>
</p:column>
<p:column headerText="Data de Demissão" style="text-align: center"
sortBy="#{funcionario.dataDemissao}">
<h:outputText value="#{funcionario.dataDemissao}">
<f:convertDateTime pattern="dd/MM/yyyy"
timeZone="America/Sao_Paulo" />
</h:outputText>
</p:column>
<p:column>
<p:button icon="ui-icon-pencil" title="Editar"
outcome="/CadastroFuncionario">
<f:param name="id" value="#{funcionario.id}" />
</p:button>
<p:commandButton icon="ui-icon-trash" title="Excluir"
process="@this" update="@form"
action="#{consultaFuncionariosBean.excluir}">
<f:setPropertyActionListener value="#{funcionario}"
target="#{consultaFuncionariosBean.funcionarioSelecionado}" />
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
Personal class
package br.com.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
Long id;
private String nome;
private String endereco;
private String numero;
private String complemento;
private String bairro;
private String cidade;
private String estado;
private String cep;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotEmpty
@Size(max = 100)
@Column(length = 100, nullable = false)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@NotEmpty
@Size(max = 100)
@Column(length = 100, nullable = false)
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
@NotEmpty
@Size(max = 6)
@Column(length = 6, nullable = false)
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
//@NotEmpty
@Size(max = 50)
@Column(length = 50, nullable = false)
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
@NotEmpty
@Size(max = 30)
@Column(length = 30, nullable = false)
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
@NotEmpty
@Size(max = 30)
@Column(length = 30, nullable = false)
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
@NotEmpty
@Size(max = 2)
@Column(length = 2, nullable = false)
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
@NotEmpty
@Size(max = 9)
@Column(length = 9, nullable = false)
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pessoa other = (Pessoa) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
working class
package br.com.model;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
import br.com.util.DecimalPositivo;
@Entity
@Table(name = "funcionario")
public class Funcionario implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Pessoa pessoa;
private String cpf;
private String cargo;
private BigDecimal salario;
private TipoSexo sexo;
private Date dataAdmissao;
private Date dataDemissao;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotNull
@OneToOne
@JoinColumn(name="pessoa_id")
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
@NotEmpty
@Size(max = 14)
@Column(length = 14, nullable = false)
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
@NotEmpty
@Size(max = 80)
@Column(length = 80, nullable = false)
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
//@NotNull
//@DecimalMin("0")
@DecimalPositivo
@Column(precision = 10, scale = 2, nullable = false)
public BigDecimal getSalario() {
return salario;
}
public void setSalario(BigDecimal salario) {
this.salario = salario;
}
@NotNull
@Enumerated(EnumType.STRING)
@Column(nullable = false)
public TipoSexo getSexo() {
return sexo;
}
public void setSexo(TipoSexo sexo) {
this.sexo = sexo;
}
@NotNull
@Temporal(TemporalType.DATE)
@Column(name = "data_admissao", nullable = false)
public Date getDataAdmissao() {
return dataAdmissao;
}
public void setDataAdmissao(Date dataAdmissao) {
this.dataAdmissao = dataAdmissao;
}
@Temporal(TemporalType.DATE)
@Column(name = "data_Demissao", nullable = true)
public Date getDataDemissao() {
return dataDemissao;
}
public void setDataDemissao(Date dataDemissao) {
this.dataDemissao = dataDemissao;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Funcionario other = (Funcionario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
class Employee registration
package br.com.model;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.controller.CadastroFuncionarios;
import br.com.controller.CadastroPessoas;
import br.com.controller.NegocioException;
import br.com.repository.Funcionarios;
import br.com.repository.Pessoas;
@Named
@javax.faces.view.ViewScoped
public class CadastroFuncionarioBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private CadastroFuncionarios cadastrofuncionario;
@Inject
private CadastroPessoas cadastropessoa;
@Inject
private Pessoas pessoas;
@Inject
private Funcionarios funcionarios;
private Funcionario funcionario;
private Pessoa pessoa;
private List<Pessoa> todasPessoas;
private List<Funcionario> todosFuncionarios;
public void prepararCadastro() {
this.todasPessoas = this.pessoas.todas();
if (this.pessoa == null) {
this.pessoa = new Pessoa();
}
this.todosFuncionarios = this.funcionarios.todos();
if (this.funcionario == null) {
this.funcionario = new Funcionario();
}
}
public void dataAdmissaoAlterada(AjaxBehaviorEvent event) {
if (this.funcionario.getDataAdmissao() == null) {
this.funcionario.setDataDemissao(this.funcionario.getDataAdmissao());
}
}
public void salvar() {
FacesContext context = FacesContext.getCurrentInstance();
try {
pessoa = this.cadastropessoa.salvar(this.pessoa);
this.funcionario.setPessoa(pessoa);
this.pessoa = new Pessoa();
this.cadastrofuncionario.salvar(this.funcionario);
this.funcionario = new Funcionario();
context.addMessage(null, new FacesMessage("Funcionario salvo com sucesso!"));
} catch (NegocioException e) {
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
}
}
public List<String> pesquisarCargos(String cargos) {
return this.funcionarios.cargosQueContem(cargos);
}
public List<String> pesquisarCpfs(String cpfs) {
return this.funcionarios.cpfsQueContem(cpfs);
}
public List<String> pesquisarNomes(String nomes) {
return this.pessoas.nomesQueContem(nomes);
}
public List<String> pesquisarEnderecos(String enderecos) {
return this.pessoas.enderecosQueContem(enderecos);
}
public List<String> pesquisarNumeros(String numeros) {
return this.pessoas.numerosQueContem(numeros);
}
public List<String> pesquisarComplementos(String complementos) {
return this.pessoas.complementosQueContem(complementos);
}
public List<String> pesquisarBairros(String bairros) {
return this.pessoas.bairrosQueContem(bairros);
}
public List<String> pesquisarCidades(String cidades) {
return this.pessoas.cidadesQueContem(cidades);
}
public List<String> pesquisarEstados(String estados) {
return this.pessoas.estadosQueContem(estados);
}
public List<String> pesquisarCeps(String ceps) {
return this.pessoas.cepsQueContem(ceps);
}
public List<Pessoa> getTodasPessoas() {
return this.todasPessoas;
}
public List<Funcionario> getTodosFuncionarios() {
return this.todosFuncionarios;
}
public TipoSexo[] getTiposFuncionarios() {
return TipoSexo.values();
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
}
Query class Functionbean
package br.com.amarildo.model;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.amarildo.controller.CadastroFuncionarios;
import br.com.amarildo.controller.CadastroPessoas;
import br.com.amarildo.controller.NegocioException;
import br.com.amarildo.repository.Funcionarios;
import br.com.amarildo.repository.Pessoas;
@Named
@javax.faces.view.ViewScoped
public class ConsultaFuncionariosBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Funcionarios funcionariosRepository;
@Inject
private Pessoas pessoasRepository;
@Inject
private CadastroFuncionarios cadastrofuncionario;
@Inject
private CadastroPessoas cadastropessoa;
private List<Pessoa> pessoas;
private Pessoa pessoaSelecionado;
private List<Funcionario> funcionarios;
private Funcionario funcionarioSelecionado;
public void excluir() {
FacesContext context = FacesContext.getCurrentInstance();
try {
this.cadastrofuncionario.excluir(this.funcionarioSelecionado);
this.cadastropessoa.excluir(this.pessoaSelecionado);
this.consultar();
context.addMessage(null, new FacesMessage("Funcionario excluído com sucesso!"));
} catch (NegocioException e) {
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
}
}
public void consultar() {
this.funcionarios = funcionariosRepository.todos();
this.pessoas = pessoasRepository.todas();
}
public List<Pessoa> getPessoas() {
return pessoas;
}
public Pessoa getPessoaSelecionado() {
return pessoaSelecionado;
}
public void setPessoaSelecionado(Pessoa pessoaSelecionado) {
this.pessoaSelecionado = pessoaSelecionado;
}
public List<Funcionario> getFuncionarios() {
return funcionarios;
}
public Funcionario getFuncionarioSelecionado() {
return funcionarioSelecionado;
}
public void setFuncionarioSelecionado(Funcionario funcionarioSelecionado) {
this.funcionarioSelecionado = funcionarioSelecionado;
}
}
Well it’s there if anyone knows how to help me I’ll be very grateful.
You are passing only the id to the Bean. In this case your Registration Bean has to have a method to rescue the employee by
id
.– Jose Anderson Pereira
Thanks Jose, I’ll see if I find something in this sense, if you know something I can see to that respect I’m doing this program to be able to learn and I don’t have much practice. then anything that can show me the path of the stones I am grateful... more thank you for the attention and time.
– JavaX_javaX