Boa noite,
Venho através deste pedir ajuda para identificar um possível problema em uma aplicação que estou desenvolvendo. Não consigo identificar o erro de forma alguma, não aborta, não gera nenhuma crítica, apenas não faz nada.
Segue código abaixo:
Pais.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name="Pais")
public class Pais implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7160104646977079882L;
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="codigoBacen", length=5, unique=true, nullable=false)
private int codigoBacen;
@Column(name="sigla", length=2, nullable=false, unique=true)
private String sigla;
@Column(name="descricao", length=50, nullable=false, unique=true)
private String descricao;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getCodigoBacen() {
return codigoBacen;
}
public void setCodigoBacen(int codigoBacen) {
this.codigoBacen = codigoBacen;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(getClass() != obj.getClass()){
return false;
}
final Pais other = (Pais)obj;
if(this.id != other.id){
return false;
}
return true;
}
}
PaisController.java
import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import br.eti.mrs.webhair.model.Pais;
public class PaisController {
private Collection<Pais> paises;
private Pais pais;
private Pais paisSelecionado;
private EntityManager em = Persistence.createEntityManagerFactory("webhair").createEntityManager();
public PaisController(){
this.pais = new Pais();
this.paisSelecionado = new Pais();
this.paises = null;
}
public void confirmar(){
em.getTransaction().begin();
em.persist(this.pais);
em.getTransaction().commit();
this.pais = new Pais();
}
public void alterar(){
em.getTransaction().begin();
em.merge(this.paisSelecionado);
em.getTransaction().commit();
this.paisSelecionado = null;
}
public void excluir(){
em.getTransaction().begin();
em.remove(this.paisSelecionado);
em.getTransaction().commit();
this.paisSelecionado = null;
}
@SuppressWarnings("unchecked")
public Collection<Pais> getPaises(){
this.paises = em.createQuery("select a from Pais a").getResultList();
return this.paises;
}
public void setPaises(Collection<Pais> paises) {
this.paises = paises;
}
public Pais getPais() {
return this.pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
public Pais getPaisSelecionado() {
return paisSelecionado;
}
public void setPaisSelecionado(Pais paisSelecionado) {
this.paisSelecionado = paisSelecionado;
}
}
PaisConverter.java
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import br.eti.mrs.webhair.model.Pais;
public class PaisConverter implements Converter {
private EntityManager em = Persistence.createEntityManagerFactory("webhair").createEntityManager();
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String string) {
// TODO Auto-generated method stub
if(string == null){
return null;
}else{
Pais pais = em.find(Pais.class, Long.parseLong(string));
return pais;
}
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object object) {
// TODO Auto-generated method stub
return null;
}
}
Uf.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity(name="Uf")
public class Uf implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5591635789426243372L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="codigoIbge", length=2, nullable=false, unique=true)
private int codigoIbge;
@Column(name="sigla", length=2, nullable=false, unique=true)
private String sigla;
@Column(name="descricao", length=100, nullable=false, unique=false)
private String descricao;
@ManyToOne(optional=false)
@JoinColumn(name="idPais", referencedColumnName="id")
private Pais pais;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getCodigoIbge() {
return codigoIbge;
}
public void setCodigoIbge(int codigoIbge) {
this.codigoIbge = codigoIbge;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Pais getPais() {
return pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}
if(getClass() != obj.getClass()){
return false;
}
final Uf other = (Uf)obj;
if(this.id != other.id){
return false;
}
return true;
}
}
UfController.java
import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import br.eti.mrs.webhair.model.Uf;
public class UfController {
private Collection<Uf> ufs;
private Uf uf;
private Uf ufSelecionada;
private EntityManager em = Persistence.createEntityManagerFactory("webhair").createEntityManager();
public UfController(){
this.uf = new Uf();
this.ufSelecionada = new Uf();
this.ufs = null;
}
public void confirmar(){
em.getTransaction().begin();
em.persist(this.uf);
em.getTransaction().commit();
this.uf = new Uf();
}
public void alterar(){
em.getTransaction().begin();
em.merge(this.ufSelecionada);
em.getTransaction().commit();
this.ufSelecionada = null;
}
public void excluir(){
em.getTransaction().begin();
em.remove(this.ufSelecionada);
em.getTransaction().commit();
this.ufSelecionada = null;
}
@SuppressWarnings("unchecked")
public Collection<Uf> getUfs(){
this.ufs = em.createQuery("select a from Uf a").getResultList();
return this.ufs;
}
public void setUfs(Collection<Uf> ufs) {
this.ufs = ufs;
}
public Uf getUf() {
return this.uf;
}
public void setUf(Uf uf) {
this.uf = uf;
}
public Uf getUfSelecionada() {
return ufSelecionada;
}
public void setUfSelecionada(Uf ufSelecionada) {
this.ufSelecionada = ufSelecionada;
}
}
Pagina que efetua a inclusão das Uf’s.
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<h:head></h:head>
<h:form id="form_ListarUfs">
<p:dataTable id="datatable_ListarUfs" var="var_uf" value="#{ufController.ufs}"
paginator="true" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,20,30,40"
selection="#{ufController.ufSelecionada}" selectionMode="single"
onRowSelectUpdate="panelgrid_SelecionarUf" onRowSelectComplete="dialog_SelecionarUf.show()" >
<p:column sortBy="#{var_uf.codigoIbge}" filterBy="#{var_uf.codigoIbge}">
<f:facet name="header">
<h:outputText value="Código Ibge"/>
</f:facet>
<h:outputText value="#{var_uf.codigoIbge}"/>
</p:column>
<p:column sortBy="#{var_uf.sigla}" filterBy="#{var_uf.sigla}">
<f:facet name="header">
<h:outputText value="Sigla"/>
</f:facet>
<h:outputText value="#{var_uf.sigla}"/>
</p:column>
<p:column sortBy="#{var_uf.descricao}" filterBy="#{var_uf.descricao}">
<f:facet name="header">
<h:outputText value="Descrição"/>
</f:facet>
<h:outputText value="#{var_uf.descricao}"/>
</p:column>
</p:dataTable>
<p:commandButton value="Incluir" onclick="dialog_IncluirUf.show()" process="@this"/>
<p:dialog header="Detalhe Uf" widgetVar="dialog_SelecionarUf" resizable="true"
showEffect="explode" hideEffect="explode" width="500">
<h:panelGrid id="panelgrid_SelecionarUf" columns="2" cellpadding="4">
<h:outputLabel id="label_SelecionarUf_codigoIbge" for="outputtext_SelecionarUf_codigoIbge" value="Código Ibge" />
<h:outputText id="outputtext_SelecionarUf_codigoIbge" value="#{ufController.ufSelecionada.codigoIbge}"/>
<h:outputLabel id="label_SelecionarUf_sigla" for="outputtext_SelecionarUf_sigla" value="Sigla" />
<h:outputText id="outputtext_SelecionarUf_sigla" value="#{ufController.ufSelecionada.sigla}"/>
<h:outputLabel id="label_SelecionarUf_descricao" for="inputtext_SelecionarUf_descricao" value="Descrição" />
<p:inputText id="inputtext_SelecionarUf_descricao" value="#{ufController.ufSelecionada.descricao}"/>
</h:panelGrid>
<p:commandButton value="Alterar" actionListener="#{ufController.alterar}"
update="datatable_ListarUfs" oncomplete="dialog_SelecionarUf.hide()" />
<p:commandButton value="Excluir" actionListener="#{ufController.excluir}"
update="datatable_ListarUfs" oncomplete="dialog_SelecionarUf.hide()"/>
</p:dialog>
</h:form>
<p:dialog header="Incluir Uf" widgetVar="dialog_IncluirUf" resizable="true"
showEffect="explode" hideEffect="explode" width="500" appendToBody="true" >
<h:form>
<h:panelGrid id="panelgrid_IncluirUf" columns="2" cellpadding="4">
<h:outputLabel id="label_IncluirUf_codigoIbge" for="inputtext_IncluirUf_codigoIbge" value="Código Ibge" />
<p:inputText id="inputtext_IncluirUf_codigoIbge" value="#{ufController.uf.codigoIbge}"/>
<h:outputLabel id="label_IncluirUf_sigla" for="inputtext_IncluirUf_sigla" value="Sigla" />
<p:inputText id="inputtext_IncluirUf_sigla" value="#{ufController.uf.sigla}"/>
<h:outputLabel id="label_IncluirUf_descricao" for="inputtext_IncluirUf_descricao" value="Descrição" />
<p:inputText id="inputtext_IncluirUf_descricao" value="#{ufController.uf.descricao}"/>
<h:outputLabel id="label_IncluirUf_pais" for="selectonemenu_IncluirUf_pais" value="Pais" />
<h:selectOneMenu id="selectonemenu_IncluirUf_pais" value="#{ufController.uf.pais}">
<f:selectItems value="#{paisController.paises}" var="var_listaPaises"
itemValue="#{var_listaPaises.id}"
itemLabel="#{var_listaPaises.sigla} - #{var_listaPaises.descricao}"/>
</h:selectOneMenu>
</h:panelGrid>
<p:commandButton value="Resetar" type="reset"/>
<p:commandButton value="Confirmar" actionListener="#{ufController.confirmar}"
update="form_ListarUfs @parent" oncomplete="dialog_IncluirUf.hide()" />
</h:form>
</p:dialog>
</h:body>
</html>
O que acontece e basicamente isto:
<h:selectOneMenu id="selectonemenu_IncluirUf_pais" value="#{ufController.uf.pais}">
<f:selectItems value="#{paisController.paises}" var="var_listaPaises"
itemValue="#{var_listaPaises.id}"
itemLabel="#{var_listaPaises.sigla} - #{var_listaPaises.descricao}"/>
</h:selectOneMenu>
Neste ponto ele não seta o valor a ufController.uf.pais, e como consequência não faz mais nada. Efetuei o debug, e ao passar pelo PaisConverter, ele chega com valor, sendo o mesmo convertido corretamente, mas parece que depois disso o processo pará.
Desde já agradeço a ajuda de todos.