Na hora que eu preencho os dados com CPF funciona.
Mais quando eu preencho com CNPJ não salvar da error.
Que erro é esse ?
Console.
Caused by: javax.faces.el.EvaluationException: javax.validation.ConstraintViolationException: Validation failed for classes [com.algaworks.pedidovenda.erp.Cliente] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage=‘deve ser informando’, propertyPath=documentoReceitaFederal, rootBeanClass=class com.algaworks.pedidovenda.erp.Cliente, messageTemplate=’{javax.validation.constraints.NotNull.message}’}
]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
… 28 more
CadastroClienteBean
package com.algaworks.pedidovenda.controller;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import com.algaworks.pedidovenda.erp.Cliente;
import com.algaworks.pedidovenda.erp.TipoPessoa;
import com.algaworks.pedidovenda.service.CadastroClienteService;
import com.algaworks.pedidovenda.util.jsf.FacesUtil;
@Named
@RequestScoped
public class CadastroClienteBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private CadastroClienteService cadastroClienteService;
@Inject
private Cliente cliente;
public CadastroClienteBean() {
limpar();
}
public void limpar() {
cliente = new Cliente();
cliente.setTipo(TipoPessoa.FISICA);
}
public void salvar() {
cadastroClienteService.salvar(cliente);
limpar();
FacesUtil.addInfoMessage("Cliente salvo com sucesso.");
}
public boolean isPessoaJuridica(){
return this.cliente.getTipo().equals(TipoPessoa.JURIDICA);
}
public boolean isPessoaFisica(){
return this.cliente.getTipo().equals(TipoPessoa.FISICA);
}
public TipoPessoa[] getTiposPessoa() {
return TipoPessoa.values();
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public CadastroClienteService getCadastroClienteService() {
return cadastroClienteService;
}
public void setCadastroClienteService(CadastroClienteService cadastroClienteService) {
this.cadastroClienteService = cadastroClienteService;
}
}
[/code]
Classe Cliente ...
[code lang="java"]
package com.algaworks.pedidovenda.erp;
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;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String nome;
private String email;
@Valid
private String documentoReceitaFederal;
private TipoPessoa tipo = TipoPessoa.FISICA;
private List<Endereco> enderecos = new ArrayList<>();
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotNull
@Size(max=100)
@Column(nullable = false, length=100)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@NotBlank @Size(max=100)
@Column(nullable=false, length=255, unique=true)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@NotNull
@Size(max = 18)
@Column(name = "doc_receita_federal", nullable = false, length = 18)
public String getDocumentoReceitaFederal() {
return documentoReceitaFederal;
}
public void setDocumentoReceitaFederal(String documentoReceitaFederal) {
this.documentoReceitaFederal = documentoReceitaFederal;
}
@NotNull
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 10)
public TipoPessoa getTipo() {
return tipo;
}
public void setTipo(TipoPessoa tipo) {
this.tipo = tipo;
}
@OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
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;
Cliente other = (Cliente) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
[/code]
CadastroCliente.xhtml ...
[code lang="java"]
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
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">
<script>
function tratarInclusaoProduto(args) {
if (!args.validationFailed) {
PF('inclusaoProdutoDialog').hide();
}
}
</script>
<ui:define name="titulo">Novo Cliente</ui:define>
<ui:define name="corpo">
<f:metadata>
<o:viewParam name="cliente" value="#{cadastroClienteBean.cliente}" />
</f:metadata>
<h:form id="frmCliente">
<h1>Novo Cliente</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" outcome="/clientes/CadastroCliente" />
<p:commandButton value="Salvar" id="btnSalvar"
action="#{cadastroClienteBean.salvar}" update="@form" />
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa" outcome="/clientes/PesquisaCliente" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel"
style="width: 100%; margin-top: 20px; margin-bottom:10px"
columnClasses="rotulo, campo">
<p:outputLabel value="Nome" for="nome" />
<p:inputText id="nome" size="70"
value="#{cadastroClienteBean.cliente.nome}" />
<p:outputLabel value="Tipo" for="tipo" />
<p:selectOneRadio id="tipo"
value="#{cadastroClienteBean.cliente.tipo}">
<f:selectItems value="#{cadastroClienteBean.tiposPessoa}"
var="tipoPessoa" itemValue="#{tipoPessoa}"
itemLabel="#{tipoPessoa.descricao}" />
<p:ajax event="change" process="@this" partialSubmit="true"
update="frmCliente" />
</p:selectOneRadio>
<p:outputLabel value="CNPJ" for="cnpj" rendered="#{cadastroClienteBean.pessoaJuridica}"/>
<p:inputMask id="cnpj" mask="99.999.999/9999-99" rendered="#{cadastroClienteBean.pessoaJuridica}"
value="#{cadastroClienteBean.cliente.documentoReceitaFederal}" required="true" />
<p:outputLabel value="CPF" for="cpf" rendered="#{!cadastroClienteBean.pessoaJuridica}"/>
<p:inputMask id="cpf" mask="999.999.999-99" rendered="#{!cadastroClienteBean.pessoaJuridica}"
value="#{cadastroClienteBean.cliente.documentoReceitaFederal}" />
<p:outputLabel value="E-mail" for="email" />
<p:inputText id="email" size="50"
value="#{cadastroClienteBean.cliente.email}" />
</p:panelGrid>
<p:commandButton value="Adicionar Endereço"
style="margin-top: 15px; margin-bottom:10px"
onclick="PF('inclusaoProdutoDialog').show(); return false;" />
<p:dataTable id="tableNovoCliente" value="" var="novoCliente"
style="margin-top: 10px" rows="5"
emptyMessage="Nenhum cliente encontrado" reflow="true"
rowsPerPageTemplate="10, 20, 30" paginator="true"
paginatorAlwaysVisible="false" paginatorPosition="bottom">
<p:column headerText="Logradouro"
style="width:400px; text-align: left">
<h:outputText value="Rua Teste" />
</p:column>
<p:column headerText="Número" style="width:80px; text-align: left">
<h:outputText value="123" />
</p:column>
<p:column headerText="Complemento"
style="width: 250px; text-align: left">
<h:outputText value="Apt02" />
</p:column>
<p:column headerText="CEP" style="width: 100px; text-align: left">
<h:outputText value="37550-000" />
</p:column>
<p:column headerText="Cidade/UF"
style="width: 200px; text-align: left">
<h:outputText value="Salvador-BA" />
</p:column>
<p:column style="width: 100px; text-align:center">
<p:button icon="ui-icon-pencil" title="Editar" />
<p:button icon="ui-icon-trask" title="Excluir" />
</p:column>
</p:dataTable>
</h:form>
<h:form>
<p:dialog header="Inclusão de Endereço"
widgetVar="inclusaoProdutoDialog" modal="true" resizable="false">
<h:panelGroup id="inclusaoPanel">
<p:messages />
<h:panelGrid columns="2">
<p:outputLabel value="Lograduro" for="lorgaduro" />
<p:inputText id="lorgaduro" required="true" size="58"
style="margin-top: 10px" />
<p:outputLabel value="Número" for="numero" />
<p:inputText id="numero" required="true" size="10"
style="margin-top: 10px" />
<p:outputLabel value="Complemento" for="complemento" />
<p:inputText id="complemento" required="true" size="38"
style="margin-top: 10px" />
<p:outputLabel value="CEP" />
<p:inputMask mask="999-999-999" required="true" size="15"
style="margin-top: 10px" />
<p:outputLabel value="Cidade" for="enderecoCidade" />
<p:columnGroup>
<p:inputText id="enderecoCidade" size="38"
style="margin-top: 10px" />
<p:outputLabel value="UF" for="ufCidade"
style="padding-left: 25px; padding-right: 20px;
margin-top: 10px" />
<p:inputText id="ufCidade" size="5" maxlength="2" />
</p:columnGroup>
<p:outputLabel />
<p:commandButton value="Incluir"
oncomplete="PF('inclusaoProdutoDialog').hide();"
style="margin-top: 10px" />
</h:panelGrid>
</h:panelGroup>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
[/code]
ClienteRepository ...
[code lang="java"]
package com.algaworks.pedidovenda.repository;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.algaworks.pedidovenda.erp.Cliente;
import com.algaworks.pedidovenda.repository.filter.ClienteFilter;
public class ClienteRepository implements Serializable{
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public Cliente guardar(Cliente cliente) {
return manager.merge(cliente);
}
public Cliente porNome(String nome) {
try {
return manager.createQuery("from Cliente where upper(nome) = :nome", Cliente.class)
.setParameter("nome", nome.toUpperCase()).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
public List<Cliente> todos(){
return manager.createQuery("from Cliente", Cliente.class).getResultList();
}
@SuppressWarnings("unchecked")
public List<Cliente> filtrados(ClienteFilter filtro){
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Cliente.class);
if(StringUtils.isNotBlank(filtro.getNome())){
criteria.add(Restrictions.eq("nome", filtro.getNome()));
}
if(StringUtils.isNotBlank(filtro.getNome())){
criteria.add(Restrictions.ilike("nome", filtro.getNome(),MatchMode.ANYWHERE));
}
return criteria.addOrder(Order.asc("nome")).list();
}
public Cliente porId(Long id){
return manager.find(Cliente.class, id);
}
}