Boa noite.
Vou tentar resumir meu problema pra vocês.
Fiz agenda com jsf 1.2 e richfaces 3.2, a aplicação funcionou normalmente sem problemas( pricipalmente o método salvar )
O que esta acontecendo é o seguinte:
Fiz migrar esta agenda para jsf 2.0 com primefaces 2.2.1, mas aconteceu um problema, a agenda parou de salvar, o método parou de funcionar, percebi que o problema estava no primefaces ( posso esta enganado), pois quando deixo o sistema “cru” ( sem skin e sem componenste do primefaces ), o método funciona, simplesmente salva na agenda.
Posso esta comendo bronha em algo, se alguem ja passou por este problema e puder me ajudar, eu agradeço, segue abaixo as partes do cófigo.
Grato
Modelo
package br.com.agenda.modelo;
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
public class Agenda implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="agecod")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String agenom;
private String agecom;
private String agecel;
private String ageres;
private String ageobs;
private String agefax;
private String agesit;
private String ageend;
private String agebai;
private String agecid;
private String agemail;
@ManyToOne
@JoinColumn(name = "codgrupo")
private Grupo grupo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAgenom() {
return agenom;
}
public void setAgenom(String agenom) {
this.agenom = agenom;
}
public String getAgecom() {
return agecom;
}
public void setAgecom(String agecom) {
this.agecom = agecom;
}
public String getAgecel() {
return agecel;
}
public void setAgecel(String agecel) {
this.agecel = agecel;
}
public String getAgeres() {
return ageres;
}
public void setAgeres(String ageres) {
this.ageres = ageres;
}
public String getAgeobs() {
return ageobs;
}
public void setAgeobs(String ageobs) {
this.ageobs = ageobs;
}
public String getAgefax() {
return agefax;
}
public void setAgefax(String agefax) {
this.agefax = agefax;
}
public String getAgesit() {
return agesit;
}
public void setAgesit(String agesit) {
this.agesit = agesit;
}
public String getAgeend() {
return ageend;
}
public void setAgeend(String ageend) {
this.ageend = ageend;
}
public String getAgebai() {
return agebai;
}
public void setAgebai(String agebai) {
this.agebai = agebai;
}
public String getAgecid() {
return agecid;
}
public void setAgecid(String agecid) {
this.agecid = agecid;
}
public String getAgemail() {
return agemail;
}
public void setAgemail(String agemail) {
this.agemail = agemail;
}
public Grupo getGrupo() {
return grupo;
}
public void setGrupo(Grupo grupo) {
this.grupo = grupo;
}
}
DAO
package br.com.agenda.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.agenda.modelo.Agenda;
public class AgendaDAO {
private static AgendaDAO instance = new AgendaDAO();
private AgendaDAO() {
}
public static AgendaDAO getInstance() {
return instance;
}
public List<Agenda> getAll() {
EntityManager em = PersistenceUtil.getEntityManager();
Query query = em.createQuery("from Agenda");
@SuppressWarnings("unchecked")
List<Agenda> agendas = (List<Agenda>) query.getResultList();
PersistenceUtil.close(em);
return agendas;
}
public void salvar(Agenda agenda) {
EntityManager em = null;
try {
em = PersistenceUtil.getEntityManager();
em.getTransaction().begin();
if (agenda.getId() == 0) {
em.persist(agenda);
} else {
agenda = em.merge(agenda);
}
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
PersistenceUtil.close(em);
}
}
public void excluir(Agenda agenda) {
EntityManager em = null;
try {
em = PersistenceUtil.getEntityManager();
em.getTransaction().begin();
agenda = em.merge(agenda);
em.remove(agenda);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
PersistenceUtil.close(em);
}
}
}
Página
<!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:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Agenda de Contatos</title>
<link type="text/css" rel="stylesheet" href="css/theme.css" />
</h:head>
<h:body style="font-size: 10pt">
<h:form>
<p:layout fullPage="true">
<p:layoutUnit position="top" height="100" header="Agenda">
<center><h:outputText value="Agenda de contatos"
style="font-size: 26pt" /></center>
</p:layoutUnit>
<p:layoutUnit position="center" header="Centro">
<br></br>
<div align="center"><h:panelGrid columns="1">
<p:panel header="Cadastro de Contatos" style="text-align: left">
<p:panel>
<h:panelGrid columns="4" cellpadding="5">
<h:outputLabel value="Nome: " />
<p:inputText id="nome" value="#{agendaMB.agenda.agenom}" />
<h:outputText value="Endereço:" />
<p:inputText id="endereco" value="#{agendaMB.agenda.ageend}" />
<h:outputText value="Bairro:" />
<p:inputText id="bairro" value="#{agendaMB.agenda.agebai}" />
<h:outputText value="Cidade:" />
<p:inputText id="cidade" value="#{agendaMB.agenda.agecid}" />
<h:outputText value="Telefone Comercial: " />
<p:inputMask mask="([telefone removido]"
value="#{agendaMB.agenda.agecom}" />
<h:outputText value="Telefone Residencial: " />
<p:inputMask mask="([telefone removido]"
value="#{agendaMB.agenda.ageres}" />
<h:outputText value="Telefone Celular: " />
<p:inputMask mask="([telefone removido]"
value="#{agendaMB.agenda.agecel}" />
<h:outputText value="FAX: " />
<p:inputMask mask="([telefone removido]"
value="#{agendaMB.agenda.agefax}" />
<h:outputText value="WebPage:" />
<p:inputText id="site" value="#{agendaMB.agenda.agesit}" />
<h:outputText value="Email:" />
<p:inputText id="email" value="#{agendaMB.agenda.agemail}" />
<h:outputText value="Grupo: " />
<h:selectOneMenu value="#{agendaMB.agenda.grupo.id}">
<f:selectItems value="#{agendaMB.grupos}" />
</h:selectOneMenu>
<p:commandButton actionListener="#{agendaMB.salvar()}" value="Salvar"/>
</h:panelGrid>
<h:outputText value="Observações: " />
<p:inputTextarea style="width:500px;height:100px;" effectDuration="400" value="#{agendaMB.agenda.ageobs}"/>
</p:panel>
</p:panel>
</h:panelGrid></div>
</p:layoutUnit>
<p:layoutUnit position="left" width="250" header="Calendario">
<p:calendar mode="inline" />
</p:layoutUnit>
<p:layoutUnit position="right" width="150" header="Imagens">
</p:layoutUnit>
<p:layoutUnit position="bottom" height="33"
header="[email removido]">
</p:layoutUnit>
</p:layout>
</h:form>
</h:body>
</html>
Bean
package br.com.agenda.bean;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import br.com.agenda.dao.AgendaDAO;
import br.com.agenda.dao.GrupoDAO;
import br.com.agenda.modelo.Agenda;
import br.com.agenda.modelo.Grupo;
public class AgendaMB {
private Agenda agenda = new Agenda();
private DataModel listaContatos;
private List<SelectItem> grupos;
public AgendaMB() {
super();
}
public void salvar(){
AgendaDAO.getInstance().salvar(agenda);
}
public void excluir() {
agenda = (Agenda) this.listaContatos.getRowData();
AgendaDAO.getInstance().excluir(agenda);
this.listaContatos = null;
}
public String editar() {
this.agenda = (Agenda) listaContatos.getRowData();
return "novoContato";
}
public Agenda getAgenda() {
if (agenda == null) {
agenda = new Agenda();
agenda.setGrupo(new Grupo());
}
return agenda;
}
public void setAgenda(Agenda agenda) {
this.agenda = agenda;
}
public DataModel getListaContatos() {
if (this.listaContatos == null) {
List<Agenda> age = AgendaDAO.getInstance().getAll();
this.listaContatos = new ListDataModel(age);
}
return listaContatos;
}
public void setListaContatos(DataModel listaContatos) {
this.listaContatos = listaContatos;
}
public List<SelectItem> getGrupos() {
if (this.grupos == null) {
this.grupos = new ArrayList<SelectItem>();
List<Grupo> gru = GrupoDAO.getInstance().getAll();
for (Grupo grupo : gru) {
SelectItem item = new SelectItem(grupo.getId(),
grupo.getDescricao());
this.grupos.add(item);
}
}
return grupos;
}
public void setGrupos(List<SelectItem> grupos) {
this.grupos = grupos;
}
}
Erro que esta acontecendo (parece ser na grvação de um mapeamento)
09/03/2011 21:00:50 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/AgendaPessoal] threw exception [javax.el.PropertyNotFoundException: /contato2.xhtml @78,62 value="#{agendaMB.agenda.grupo.id}": Target Unreachable, 'grupo' returned null] with root cause
javax.el.PropertyNotFoundException: /contato2.xhtml @78,62 value="#{agendaMB.agenda.grupo.id}": Target Unreachable, 'grupo' returned null
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:126)
at javax.faces.component.UIInput.updateModel(UIInput.java:805)
at javax.faces.component.UIInput.processUpdates(UIInput.java:722)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIForm.processUpdates(UIForm.java:270)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1239)
at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
