erro relacionamento muitos para muitos + jsf selectitem
Tenho um relationamento muitos para muitos e entre as tabelas de polo e empresa, a nivel de hibernate, relacionamento
esta legal, o hibernate criou a tabela local_empresa a onde deve ir a chaves das tabela. Quando eu incluo um polo
somente a tabela polo e gravada na tabela onde tem as chaves das tabelas ainda nao gravo, pois bem estou listando
em um SelectItem a empresa paea associar ao polo, criei um classe para converter de objeto para string e de strinf para objeto,
mas quando eu seleciona a empresa no combo e depois clica em incluir me retorna este erro
Erro de conversão ao definir o valor 1 para null Converter.
Este 1 é o código da empresa que esta sendo associada
minha classe que converte
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Empresa empresa = new Empresa();
System.out.println(Codigo da empresa = + value);
if(value != null && value.trim().length() > 0 ){
Integer codigo = Integer.valueOf(value);
try{
EmpresaRN empresaRN = new EmpresaRN();
empresa = empresaRN.carregar(codigo);
return empresa;
}catch(Exception e){
throw new ConverterException(Não foi possível encontrar a empresa de código + value + .+e.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println(Codigo da empresa = + value);
if (value != null){
Empresa empresa = (Empresa) value;
return empresa.getCodigoEmpresa().toString();
}
return ;
}
minha classe polo
@Entity
@Table(name=polo)
@SequenceGenerator(name=seq_polo,sequenceName=seq_polo)
public class Polo implements Serializable{
private static final long serialVersionUID = -6638112313261035555L;
@Id
@GeneratedValue(generator=seq_polo,strategy=GenerationType.AUTO)
@Column(name=id_polo)
private Integer codigoPolo;
@Column(name=nome,length=40)
private String nome ;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=polo_empresa,joinColumns={@JoinColumn(name=id_polo)},
inverseJoinColumns={@JoinColumn(name=id_empresa)})
@org.hibernate.annotations.ForeignKey(name = fk_polo_empresa)
private List<Empresa> empresa;
public Integer getCodigoPolo() {
return codigoPolo;
}
public void setCodigoPolo(Integer codigoPolo) {
this.codigoPolo = codigoPolo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Empresa> getEmpresa() {
return empresa;
}
public void setEmpresa(List<Empresa> empresa) {
this.empresa = empresa;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((codigoPolo == null) ? 0 : codigoPolo.hashCode());
result = prime * result + ((empresa == null) ? 0 : empresa.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.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;
Polo other = (Polo) obj;
if (codigoPolo == null) {
if (other.codigoPolo != null)
return false;
} else if (!codigoPolo.equals(other.codigoPolo))
return false;
if (empresa == null) {
if (other.empresa != null)
return false;
} else if (!empresa.equals(other.empresa))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}
esta legal, o hibernate criou a tabela local_empresa a onde deve ir a chaves das tabela. Quando eu incluo um polo
somente a tabela polo e gravada na tabela onde tem as chaves das tabelas ainda nao gravo, pois bem estou listando
em um SelectItem a empresa paea associar ao polo, criei um classe para converter de objeto para string e de strinf para objeto,
mas quando eu seleciona a empresa no combo e depois clica em incluir me retorna este erro
Erro de conversão ao definir o valor 1 para null Converter.
Este 1 é o código da empresa que esta sendo associada
minha classe que converte
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Empresa empresa = new Empresa();
System.out.println(Codigo da empresa = + value);
if(value != null && value.trim().length() > 0 ){
Integer codigo = Integer.valueOf(value);
try{
EmpresaRN empresaRN = new EmpresaRN();
empresa = empresaRN.carregar(codigo);
return empresa;
}catch(Exception e){
throw new ConverterException(Não foi possível encontrar a empresa de código + value + .+e.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println(Codigo da empresa = + value);
if (value != null){
Empresa empresa = (Empresa) value;
return empresa.getCodigoEmpresa().toString();
}
return ;
}
minha classe polo
@Entity
@Table(name=polo)
@SequenceGenerator(name=seq_polo,sequenceName=seq_polo)
public class Polo implements Serializable{
private static final long serialVersionUID = -6638112313261035555L;
@Id
@GeneratedValue(generator=seq_polo,strategy=GenerationType.AUTO)
@Column(name=id_polo)
private Integer codigoPolo;
@Column(name=nome,length=40)
private String nome ;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=polo_empresa,joinColumns={@JoinColumn(name=id_polo)},
inverseJoinColumns={@JoinColumn(name=id_empresa)})
@org.hibernate.annotations.ForeignKey(name = fk_polo_empresa)
private List<Empresa> empresa;
public Integer getCodigoPolo() {
return codigoPolo;
}
public void setCodigoPolo(Integer codigoPolo) {
this.codigoPolo = codigoPolo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Empresa> getEmpresa() {
return empresa;
}
public void setEmpresa(List<Empresa> empresa) {
this.empresa = empresa;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((codigoPolo == null) ? 0 : codigoPolo.hashCode());
result = prime * result + ((empresa == null) ? 0 : empresa.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.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;
Polo other = (Polo) obj;
if (codigoPolo == null) {
if (other.codigoPolo != null)
return false;
} else if (!codigoPolo.equals(other.codigoPolo))
return false;
if (empresa == null) {
if (other.empresa != null)
return false;
} else if (!empresa.equals(other.empresa))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}
Jose Boas
Curtidas 0
Respostas
Davi Costa
23/03/2012
Nos seus prints o que está imprimindo no console, e coloca aqui sua página também, vai ficar mais fácil te ajudar
att Davi
att Davi
GOSTEI 0
Jose Boas
23/03/2012
<?xml version=1.0 encoding=ISO-8859-1 ?>
<!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>
<ui:composition>
<h:form id=edicaoempresa>
<h:messages/>
<h:panelGrid columns=2>
<h:outputLabel value=Empresa for=empresa/>
<h:outputText/>
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}>
<f:selectItem itemValue= itemLabel=Selecione a empresa/>
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>
</h:selectOneMenu>
<p:commandButton value=Incluir action=#{poloBean.vinculaEmpresa} update=:tab:edicaoempresa/>
</h:panelGrid>
</h:form>
</ui:composition>
</html>
<!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>
<ui:composition>
<h:form id=edicaoempresa>
<h:messages/>
<h:panelGrid columns=2>
<h:outputLabel value=Empresa for=empresa/>
<h:outputText/>
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}>
<f:selectItem itemValue= itemLabel=Selecione a empresa/>
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>
</h:selectOneMenu>
<p:commandButton value=Incluir action=#{poloBean.vinculaEmpresa} update=:tab:edicaoempresa/>
</h:panelGrid>
</h:form>
</ui:composition>
</html>
GOSTEI 0
Jose Boas
23/03/2012
Estou conseguindo popular normalmente o combo,o problema está na hora de enviar o resultado que selecionei no combo.
<?xml version=1.0 encoding=ISO-8859-1 ?>
<!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>
<ui:composition>
<h:form id=edicaoempresa>
<h:messages/>
<h:panelGrid columns=2>
<h:outputLabel value=Empresa for=empresa/>
<h:outputText/>
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}>
<f:selectItem itemValue= itemLabel=Selecione a empresa/>
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>
</h:selectOneMenu>
<p:commandButton value=Incluir action=#{poloBean.vinculaEmpresa} update=:tab:edicaoempresa/>
</h:panelGrid>
</h:form>
</ui:composition>
</html>
<?xml version=1.0 encoding=ISO-8859-1 ?>
<!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>
<ui:composition>
<h:form id=edicaoempresa>
<h:messages/>
<h:panelGrid columns=2>
<h:outputLabel value=Empresa for=empresa/>
<h:outputText/>
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}>
<f:selectItem itemValue= itemLabel=Selecione a empresa/>
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>
</h:selectOneMenu>
<p:commandButton value=Incluir action=#{poloBean.vinculaEmpresa} update=:tab:edicaoempresa/>
</h:panelGrid>
</h:form>
</ui:composition>
</html>
GOSTEI 0
Jose Boas
23/03/2012
E aqui esta o meu bean o da empresa que tem o metodo que popula SelectOneMenu
@ManagedBean(name=empresaBean)
@RequestScoped
public class EmpresaBean {
private Empresa empresaEditada = new Empresa();
private List<Empresa> lista;
private List<SelectItem> empresaSelect;
public List<SelectItem> getEmpresaSelect() {
if(this.empresaSelect == null){
this.empresaSelect = new ArrayList<SelectItem>();
EmpresaRN empresaRN = new EmpresaRN();
List<Empresa> empresa = empresaRN.listar();
SelectItem item = null;
for (Empresa emp : empresa){
item = new SelectItem(emp,emp.getNomeFantasia());
item.setEscape(false);
empresaSelect.add(item);
}
}
return empresaSelect;
}
public void setEmpresaSelect(List<SelectItem> empresaSelect) {
this.empresaSelect = empresaSelect;
}
public Empresa getEmpresaEditada() {
return empresaEditada;
}
public void setEmpresaEditada(Empresa empresaEditada) {
this.empresaEditada = empresaEditada;
}
public List<Empresa> getLista() {
if(this.lista == null){
EmpresaRN empresaRN = new EmpresaRN();
this.lista = empresaRN.listar();
}
return this.lista;
}
public void setLista(List<Empresa> lista) {
this.lista = lista;
}
public void novo(){
this.empresaEditada = new Empresa();
this.empresaEditada.setCodigoEmpresa(0);
}
public void editar(){
}
public void excluir(){
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.excluir(this.empresaEditada);
this.lista = null;
}
public void salvar(){
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.salvar(this.empresaEditada);
this.novo();
this.lista = null;
}
}
@ManagedBean(name=empresaBean)
@RequestScoped
public class EmpresaBean {
private Empresa empresaEditada = new Empresa();
private List<Empresa> lista;
private List<SelectItem> empresaSelect;
public List<SelectItem> getEmpresaSelect() {
if(this.empresaSelect == null){
this.empresaSelect = new ArrayList<SelectItem>();
EmpresaRN empresaRN = new EmpresaRN();
List<Empresa> empresa = empresaRN.listar();
SelectItem item = null;
for (Empresa emp : empresa){
item = new SelectItem(emp,emp.getNomeFantasia());
item.setEscape(false);
empresaSelect.add(item);
}
}
return empresaSelect;
}
public void setEmpresaSelect(List<SelectItem> empresaSelect) {
this.empresaSelect = empresaSelect;
}
public Empresa getEmpresaEditada() {
return empresaEditada;
}
public void setEmpresaEditada(Empresa empresaEditada) {
this.empresaEditada = empresaEditada;
}
public List<Empresa> getLista() {
if(this.lista == null){
EmpresaRN empresaRN = new EmpresaRN();
this.lista = empresaRN.listar();
}
return this.lista;
}
public void setLista(List<Empresa> lista) {
this.lista = lista;
}
public void novo(){
this.empresaEditada = new Empresa();
this.empresaEditada.setCodigoEmpresa(0);
}
public void editar(){
}
public void excluir(){
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.excluir(this.empresaEditada);
this.lista = null;
}
public void salvar(){
EmpresaRN empresaRN = new EmpresaRN();
empresaRN.salvar(this.empresaEditada);
this.novo();
this.lista = null;
}
}
GOSTEI 0
Davi Costa
23/03/2012
Desconfio que seu problema esteja aqui:
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}> // se value aqui é empresa
<f:selectItem itemValue= itemLabel=Selecione a empresa/> ///itemValue vazio?
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>// pq itemValue não é pg??
</h:selectOneMenu>
Lembre-se que fazendo essas alterações, talvez vai ter impactos no converter.
att Davi
<h:selectOneMenu id=empresa value=#{poloBean.poloEditado.empresa}> // se value aqui é empresa
<f:selectItem itemValue= itemLabel=Selecione a empresa/> ///itemValue vazio?
<f:selectItems var=pg itemValue=pg.codigoEmpresa value=#{empresaBean.empresaSelect}/>// pq itemValue não é pg??
</h:selectOneMenu>
Lembre-se que fazendo essas alterações, talvez vai ter impactos no converter.
att Davi
GOSTEI 0
Jose Boas
23/03/2012
Ok. Darei um olhada
GOSTEI 0
Jose Boas
23/03/2012
Desculpa, mas eu não sei eu não consigo ver esta opção de fechar o chamado, eu quero mas não vejo.
GOSTEI 0
Jose Boas
23/03/2012
Nao consegui acertar ainda
GOSTEI 0
Jose Boas
23/03/2012
da este erro : Erro de validação: o valor não é válido esta classe da qualeu insere é um que esta mapead muitos para muitos, é por isso será que dá este erro.
GOSTEI 0