0
I have an Enum Type which has a JURIDICAL person and a PHYSICAL person. I created a custom name (Legal) and (Physical). I’m getting to appear on the screen the custom name, but in the database is saving the variable Enum JURIDICA or FISICA, but I would like to save Legal or Physical.
Follow the codes below:
Tipopessoa.java
package com.damasystem.dama.model;
public enum TipoPessoa {
FISICA("Física"), JURIDICA("Jurídica");
private String descricao;
private TipoPessoa(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
}
Enumtypeconverter.java
package com.damasystem.dama.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.EnumType;
@FacesConverter("enumTypeConverter")
public class EnumTypeConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null) {
return EnumType.valueOf(value);
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null && value instanceof EnumType) {
return ((EnumType) value).name();
}
return null;
}
}
Acquirer.java
package com.damasystem.dama.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
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.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "adquirente")
public class Adquirente implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String razaoSocial;
private String nomeFantasia;
private String email;
private String telefone;
private String celular;
private String documentoReceitaFederal;
private TipoPessoa tipoPessoa;
private List<Endereco> enderecos = new ArrayList<>();
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "razao_social", nullable = false, length = 100)
public String getRazaoSocial() {
return razaoSocial;
}
public void setRazaoSocial(String razaoSocial) {
this.razaoSocial = razaoSocial;
}
@Column(name = "nome_fantasia", length = 100)
public String getNomeFantasia() {
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
@Column(nullable = false, length = 100)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(nullable = false, length = 20)
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@Column(length = 20)
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
@Column(name = "documento_receita_federal", length = 20)
public String getDocumentoReceitaFederal() {
return documentoReceitaFederal;
}
public void setDocumentoReceitaFederal(String documentoReceitaFederal) {
this.documentoReceitaFederal = documentoReceitaFederal;
}
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 10)
public TipoPessoa getTipoPessoa() {
return tipoPessoa;
}
public void setTipoPessoa(TipoPessoa tipoPessoa) {
this.tipoPessoa = tipoPessoa;
}
@OneToMany(mappedBy = "adquirente", cascade = CascadeType.ALL, orphanRemoval = true)
public List<Endereco> getEnderecos() {
return enderecos;
}
public void setEnderecos(List<Endereco> enderecos) {
this.enderecos = enderecos;
}
@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;
Adquirente other = (Adquirente) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
cadastral.xhtml
<ui:composition 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:o="http://omnifaces.org/ui"
template="/WEB-INF/template.xhtml">
<ui:define name="title">#{cadastroAdquirenteBean.editando ? 'Edição de adquirente' : 'Novo adquirente'}</ui:define>
<ui:define name="breadcrumb">
<li>Pages</li>
<li>/</li>
<li><p:link outcome="/adquirentes/cadastroAdquirente">Cadastro de adquirente</p:link></li>
</ui:define>
<ui:define name="content">
<f:metadata>
<o:viewParam name="adquirente" value="#{cadastroAdquirenteBean.adquirente}" />
<f:event listener="#{cadastroAdquirenteBean.inicializar()}" type="preRenderView" />
</f:metadata>
<h:form id="frmCadastroAdquirente">
<h1>#{cadastroAdquirenteBean.editando ? 'Edição de adquirente' : 'Novo adquirente'}</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 10px" >
<p:toolbarGroup>
<p:button value="Novo" outcome="/adquirentes/cadastroAdquirente.xhtml" />
<p:commandButton id="salvar" value="Salvar" action="#{cadastroAdquirenteBean.salvar}" process="@this"
update=":frmCadastroAdquirente:pnlCadastro :frmCadastroAdquirente:enderecosTable" />
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:commandButton value="Enviar por e-mail" process="@this" />
<p:button value="Pesquisa" outcome="/adquirentes/pesquisaAdquirente.xhtml" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid id="pnlCadastro" columns="2" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo" >
<p:outputLabel value="Tipo de Pessoa" for="tipoPessoa" />
<p:selectOneRadio id="tipoPessoa" value="#{cadastroAdquirenteBean.adquirente.tipoPessoa}" >
<f:selectItems value="#{cadastroAdquirenteBean.tiposPessoas}" var="tipoPessoa"
itemLabel="#{tipoPessoa.descricao}" itemValue="#{tipoPessoa}" />
<p:ajax event="change" process=":frmCadastroAdquirente:pnlCadastro" update="nomePessoa labelPessoa maskPessoa"/>
</p:selectOneRadio>
<h:panelGroup id="nomePessoa">
<p:outputLabel value="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? 'Nome' : 'Razão Social' }" for="razaoSocial"/>
</h:panelGroup>
<p:inputText id="razaoSocial" value="#{cadastroAdquirenteBean.adquirente.razaoSocial}" size="80" maxlength="100" />
<p:outputLabel for="nomeFantasia" value="Nome Fantasia" />
<p:inputText id="nomeFantasia" value="#{cadastroAdquirenteBean.adquirente.nomeFantasia}" size="80" maxlength="100" />
<h:panelGroup id="labelPessoa">
<p:outputLabel value="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? 'CPF' : 'CNPJ' }" for="documento"/>
</h:panelGroup>
<h:panelGroup id="maskPessoa">
<p:inputMask id="documento" mask="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? '999.999.999-99' : '99.999.999/9999-99'}"
value="#{cadastroAdquirenteBean.adquirente.documentoReceitaFederal}" />
</h:panelGroup>
<p:outputLabel for="email" value="E-mail" />
<p:inputText id="email" value="#{cadastroAdquirenteBean.adquirente.email}" size="80" maxlength="100" />
<p:outputLabel for="telefone" value="Telefone" />
<p:inputText id="telefone" value="#{cadastroAdquirenteBean.adquirente.telefone}" size="20" maxlength="20" />
<p:outputLabel for="celular" value="Celular" />
<p:inputText id="celular" value="#{cadastroAdquirenteBean.adquirente.celular}" size="20" maxlength="20" />
</p:panelGrid>
<p:commandButton id="addEnderecoAdquirente" value="Adicionar endereço" action="#{cadastroAdquirenteBean.prepararNovoEndereco()}"
style="margin-top: 20px" process="@this" update=":frmCadastroAdquirente:pnlCadastroEndereco"
oncomplete="PF('inclusaoEndereco').show()" />
<p:dialog header="Inclusão de endereço" widgetVar="inclusaoEndereco" draggable="false"
resizable="false" modal="false" minimizable="true" maximizable="true" >
<h:panelGroup>
<h:panelGrid id="pnlCadastroEndereco" columns="2" >
<p:outputLabel for="logradouro" value="Logradouro" />
<p:inputText id="logradouro" value="#{cadastroAdquirenteBean.endereco.logradouro}" size="100" maxlength="110"
required="true" requiredMessage="Informe o logradouro." />
<p:outputLabel for="numero" value="Número" />
<p:inputText id="numero" value="#{cadastroAdquirenteBean.endereco.numero}" size="5" maxlength="5" required="true"
requiredMessage="Informe o número." />
<p:outputLabel for="complemento" value="Complemento" />
<p:inputText id="complemento" value="#{cadastroAdquirenteBean.endereco.complemento}" size="40" maxlength="50" />
<p:outputLabel for="cep" value="CEP" />
<p:inputText id="cep" value="#{cadastroAdquirenteBean.endereco.cep}" size="15" maxlength="20" required="true"
requiredMessage="Informe o CEP." />
<p:outputLabel value="País" for="pais"/>
<p:selectOneMenu id="pais" value="#{cadastroAdquirenteBean.pais}" >
<f:selectItem itemLabel="Selecione o país"/>
<f:selectItems value="#{cadastroAdquirenteBean.listaPaises}" var="pais"
itemValue="#{pais}" itemLabel="#{pais.nome}" />
<p:ajax listener="#{cadastroAdquirenteBean.carregarEstados()}" update="estado" />
</p:selectOneMenu>
<p:outputLabel value="Estado" for="estado"/>
<p:selectOneMenu id="estado" value="#{cadastroAdquirenteBean.estado}" >
<f:selectItem itemLabel="Selecione o estado"/>
<f:selectItems value="#{cadastroAdquirenteBean.listaEstados}" var="estado"
itemValue="#{estado}" itemLabel="#{estado.nome}" />
<p:ajax listener="#{cadastroAdquirenteBean.carregarCidades()}" update="cidade" />
</p:selectOneMenu>
<p:outputLabel value="Cidade" for="cidade"/>
<p:selectOneMenu id="cidade" value="#{cadastroAdquirenteBean.cidade}">
<f:selectItem itemLabel="Selecione a cidade"/>
<f:selectItems value="#{cadastroAdquirenteBean.listaCidades}" var="cidade"
itemValue="#{cidade}" itemLabel="#{cidade.nome}" />
</p:selectOneMenu>
<p:commandButton value="Incluir" action="#{cadastroAdquirenteBean.incluirEndereco()}"
oncomplete="PF('inclusaoEndereco').hide()" update=":frmCadastroAdquirente:enderecosTable" />
</h:panelGrid>
</h:panelGroup>
</p:dialog>
<p:dataTable id="enderecosTable" value="#{cadastroAdquirenteBean.adquirente.enderecos}" var="endereco"
style="margin-top: 10px" emptyMessage="Nenhum adquirente encontrado."
rows="20" paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom" >
<p:column headerText="Logradouro" style="text-align: left" >
<h:outputText value="#{endereco.logradouro}" />
</p:column>
<p:column headerText="Número" style="text-align: center; width: 100px" >
<h:outputText value="#{endereco.numero}" />
</p:column>
<p:column headerText="Complemento" style="text-align: left; width: 120px" >
<h:outputText value="#{endereco.complemento}" />
</p:column>
<p:column headerText="CEP" style="text-align: center; width: 80px" >
<h:outputText value="#{endereco.cep}" />
</p:column>
<p:column headerText="Cidade - Estado - País" style="text-align: left; width: 250px" >
<h:outputText value="#{endereco.cidade.nome} - #{endereco.cidade.estado.nome} - #{endereco.cidade.estado.pais.nome}" />
</p:column>
<p:column style="text-align: center; width: 100px" >
<p:commandButton icon="ui-icon-pencil" title="Editar" oncomplete="PF('inclusaoEndereco').show()" process="@this"
update=":frmCadastroAdquirente:pnlCadastroEndereco" >
<f:setPropertyActionListener value="#{endereco}" target="#{cadastroAdquirenteBean.endereco}" />
</p:commandButton>
<p:commandButton icon="ui-icon-trash" title="Excluir" oncomplete="PF('confirmacaoExclusao').show()" process="@this" >
<f:setPropertyActionListener value="#{endereco}" target="#{cadastroAdquirenteBean.enderecoSelecionado}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog header="Exclusão de endereço" message="Tem certeza que deseja excluir o endereço?"
widgetVar="confirmacaoExclusao" >
<p:button value="Não" onclick="PF('confirmacaoExclusao').hide(); return false;" />
<p:commandButton value="Sim" oncomplete="PF('confirmacaoExclusao').hide()"
actionListener="#{cadastroAdquirenteBean.removerEndereco()}" process="@this"
update=":frmCadastroAdquirente:enderecosTable" />
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
If you are using JPA from version 2.1, you can use Converters to convert data types to be persisted in the database, including enums. Link with example: https://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/
– Júlio Neto
Thank you for the reply.
– Renato Barata Gomes