有时会发生此错误。并非总是如此,因此我无法找到解决方案。当我从列表中选择一个项目时会发生错误(我重复一遍,错误只会在某些时候发生)。我已经实现了“equals”和“hashCode”方法并创建了转换器。请看下面的代码:
<p:outputLabel for="pais" value="País:" />
<p:selectOneMenu id="pais" value="#{clienteController.pais}" >
<f:selectItem itemLabel="Selecione..." itemValue="" />
<f:selectItems value="#{clienteController.paises}" var="p" itemLabel="#{p.nome}" itemValue="#{p}"/>
<p:ajax event="change" listener="#{clienteController.actionCarregaUfs}" update="uf" />
</p:selectOneMenu>
package control;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import dao.PaisDao;
import dao.PaisDaoImp;
import model.Pais;
@FacesConverter(forClass=Pais.class)
public class PaisConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
if (value != null && !value.equals("")) {
PaisDao paisDao = new PaisDaoImp();
return paisDao.findById(Integer.valueOf(value));
}
return null;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
if (value instanceof Pais) {
Pais pais = (Pais) value;
return String.valueOf(pais.getCodigo());
}
return "";
}
}
package control;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import dao.ClienteDao;
import dao.ClienteDaoImp;
import dao.PaisDaoImp;
import dao.TipoDocumentoDaoImp;
import dao.UnidadeFederacaoDaoImp;
import model.Cliente;
import model.Municipio;
import model.Pais;
import model.TipoDocumento;
import model.UnidadeFederacao;
@ManagedBean
@ViewScoped
public class ClienteController implements Serializable {
private Cliente cliente;
private DataModel listaClientes;
private List<Cliente> filteredClientes;
private Boolean isInsercao;
private Boolean isAlteracao;
private Pais pais;
private List<Pais> paises;
private List<UnidadeFederacao> ufs;
private UnidadeFederacao uf;
private List<Municipio> municipios;
private List<TipoDocumento> tiposDocumentos;
public ClienteController() {
this.cliente = new Cliente();
this.pais = new Pais();
this.ufs = new ArrayList<UnidadeFederacao>();
this.uf = new UnidadeFederacao();
this.municipios = new ArrayList<Municipio>();
this.tiposDocumentos = new ArrayList<TipoDocumento>();
}
public List<Cliente> getFilteredClientes() {
return filteredClientes;
}
public void setFilteredClientes(List<Cliente> filteredClientes) {
this.filteredClientes = filteredClientes;
}
public DataModel getListarClientes() {
List<Cliente> lista = new ClienteDaoImp().list();
listaClientes = new ListDataModel(lista);
return listaClientes;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public String prepararAdicionarCliente() {
cliente = new Cliente();
isInsercao = true;
isAlteracao = false;
return "gerenciarCliente";
}
public String prepararAlterarCliente() {
isInsercao = false;
isAlteracao = true;
this.pais = this.cliente.getMunicipio().getUf().getPais();
this.uf = this.cliente.getMunicipio().getUf();
return "gerenciarCliente";
}
public String excluirCliente() {
Cliente clienteTemp = (Cliente) (listaClientes.getRowData());
ClienteDao dao = new ClienteDaoImp();
dao.remove(clienteTemp);
return "index";
}
public String actExcluirCliente() {
ClienteDao dao = new ClienteDaoImp();
dao.remove(cliente);
return "index";
}
public String adicionarCliente() {
System.out.println("Adicionando Cliente...");
ClienteDao dao = new ClienteDaoImp();
dao.save(cliente);
return "index";
}
public String alterarCliente() {
ClienteDao dao = new ClienteDaoImp();
dao.update(cliente);
return "index";
}
public Boolean getIsInsercao() {
return isInsercao;
}
public void setIsInsercao(Boolean insercao) {
this.isInsercao = insercao;
}
public Boolean getIsAlteracao() {
return isAlteracao;
}
public void setIsAlteracao(Boolean alteracao) {
this.isAlteracao = alteracao;
}
/**************************************************/
public Pais getPais() {
return pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
public List<Pais> getPaises() {
paises = new PaisDaoImp().list();
return paises;
}
public void setPaises(List<Pais> paises) {
this.paises = paises;
}
public List<UnidadeFederacao> getUfs() {
return ufs;
}
public void setUfs(List<UnidadeFederacao> ufs) {
this.ufs = ufs;
}
public UnidadeFederacao getUf() {
return uf;
}
public void setUf(UnidadeFederacao uf) {
this.uf = uf;
}
public List<Municipio> getMunicipios() {
return municipios;
}
public void setMunicipios(List<Municipio> municipios) {
this.municipios = municipios;
}
public List<UnidadeFederacao> getUfsByPais() {
ufs = new PaisDaoImp().getUFsByPais(this.pais.getCodigo());
return ufs;
}
public void actionCarregaUfs() {
ufs.clear();
if (this.pais != null) {
if (!String.valueOf(this.pais.getCodigo()).equals("")) {
this.getUfsByPais();
}
}
}
public List<Municipio> getMunicipiossByUf() {
municipios = new UnidadeFederacaoDaoImp().getMunicipiosByUF(this.uf.getCodigo());
return municipios;
}
public void actionCarregaMunicipios() {
municipios.clear();
try {
this.uf.getCodigo();
} catch(NullPointerException e) {
return;
}
this.getMunicipiossByUf();
}
public List<TipoDocumento> getTiposDocumentos() {
tiposDocumentos = new TipoDocumentoDaoImp().list();
return tiposDocumentos;
}
}
package model;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "pais")
public class Pais implements Serializable {
@Id
@Column(name = "id_pais")
private Integer codigo;
@Column(length = 4)
private String sigla;
private String nome;
@OneToMany(mappedBy = "pais")
private List<UnidadeFederacao> unidadesFederacao;
public Pais() {
}
public Object getId() {
return nome;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<UnidadeFederacao> getUnidadesFederacao() {
return unidadesFederacao;
}
public void setUnidadesFederacao(List<UnidadeFederacao> unidadesFederacao) {
this.unidadesFederacao = unidadesFederacao;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Pais))
return false;
Pais other = (Pais) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}