Já procurei por todo o fórum e por toda a internet, testei todas as soluções possíveis e nada! Se alguém puder me ajudar. O action do <p:commadButton> não chama o Bean, com isso não consigo gravar os dados na minha tabela. Segue abaixo os fontes:
ConsultaBean
package br.com.pew.controller;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.hibernate.Session;
import org.hibernate.context.spi.CurrentSessionContext;
import org.primefaces.event.RowEditEvent;
import org.primefaces.event.SelectEvent;
import br.com.pew.util.HibernateUtil;
import br.com.pew.model.Consulta;
import br.com.pew.model.Medico;
import br.com.pew.dao.ConsultaDAO;
import br.com.pew.dao.MedicoDAO;
@SessionScoped
@ManagedBean
public class ConsultaBean {
private Consulta consulta = new Consulta();
private Consulta selecConsulta = new Consulta();
private List<Consulta> listaConsulta;
private ConsultaDAO consultaDao = new ConsultaDAO();
private List<Medico> medicos;
private MedicoDAO medicoDao = new MedicoDAO();
@PostConstruct
private void init(){
medicos = medicoDao.getList();
}
public Consulta getConsulta(){
return consulta;
}
public String Adicionar(){
consultaDao.addConsulta(consulta);
return "cadNovaConsulta.jsf";
}
public String Atualizar(){
consultaDao.AtualizarConsulta(consulta);
return "cadConsulta";
}
public String Remover(){
consultaDao.RemoverConsulta(consulta);
return "cadConsulta";
}
public void setSelectConsulta(Consulta selectConsulta){
if (selectConsulta != null){
this.selecConsulta = selectConsulta;
}
}
public Consulta getSelectConsulta(){
return selecConsulta;
}
public List<Consulta> ListarConsulta(){
listaConsulta = consultaDao.getList(consulta.getIdPaciente());
return listaConsulta;
}
public List<Medico> getMedicos(){
return medicos;
}
public void setMedicos(List<Medico> medicos){
this.medicos = medicos;
}
}
ConsultaDAO
package br.com.pew.dao;
import java.util.List;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.context.internal.ManagedSessionContext;
import org.hibernate.criterion.Restrictions;
import br.com.pew.model.Atendente;
import br.com.pew.model.Consulta;
import br.com.pew.model.Medico;
import br.com.pew.model.Paciente;
import br.com.pew.util.HibernateUtil;
public class ConsultaDAO {
SessionFactory sf = HibernateUtil.getSessionFactory();
Transaction trans;
Session currentSession;
private List<Consulta> list;
public void addConsulta(Consulta cons){
try{
currentSession = sf.openSession();
currentSession.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(currentSession);
currentSession.beginTransaction();
Consulta consulta = new Consulta();
consulta.setDataConsulta(cons.getDataConsulta());
consulta.setIdMedico(cons.getIdMedico());
consulta.setIdPaciente(cons.getIdPaciente());
consulta.setTipoConsulta(cons.getTipoConsulta());
consulta.setSituacao(cons.getSituacao());
currentSession.save(consulta);
ManagedSessionContext.unbind(sf);
currentSession.flush();
currentSession.getTransaction().commit();
}catch(Exception e){
currentSession.getTransaction().rollback();
e.printStackTrace();
}finally{
currentSession.close();
}
}
public void AtualizarConsulta(Consulta cons){
try{
currentSession = sf.openSession();
currentSession.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(currentSession);
currentSession.beginTransaction();
Consulta consulta = new Consulta();
consulta.setDataConsulta(cons.getDataConsulta());
consulta.setIdMedico(cons.getIdMedico());
consulta.setIdPaciente(cons.getIdPaciente());
consulta.setTipoConsulta(cons.getTipoConsulta());
consulta.setSituacao(cons.getSituacao());
consulta.setId(cons.getId());
currentSession.update(consulta);
ManagedSessionContext.unbind(sf);
currentSession.flush();
currentSession.getTransaction().commit();
}catch(Exception e){
currentSession.getTransaction().rollback();
e.printStackTrace();
}finally{
currentSession.close();
}
}
public void RemoverConsulta(Consulta cons){
try{
currentSession = sf.openSession();
currentSession.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(currentSession);
currentSession.beginTransaction();
currentSession.delete(cons);
ManagedSessionContext.unbind(sf);
currentSession.flush();
currentSession.getTransaction().commit();
}catch(Exception e){
currentSession.getTransaction().rollback();
e.printStackTrace();
}finally{
currentSession.close();
}
}
public List<Consulta> getList(Paciente idPaciente){
currentSession = sf.openSession();
currentSession.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(currentSession);
Criteria cri = currentSession.createCriteria(Consulta.class);
cri.createCriteria("Medico");
cri.add(Restrictions.eq("idPaciente",idPaciente));
list = cri.list();
return list;
}
public Integer getRowKey(Consulta cons){
return cons.getId();
}
}
Classe Consulta
package br.com.pew.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
public class Consulta implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@ManyToOne
@JoinColumn(name="idPaciente",
referencedColumnName="id")
private Paciente idPaciente;
private Date dataConsulta;
private String tipoConsulta;
@ManyToOne
@JoinColumn(name="idMedico",
referencedColumnName="id")
private Medico idMedico;
private String situacao;
public Paciente getIdPaciente() {
return idPaciente;
}
public void setIdPaciente(Paciente idPaciente) {
this.idPaciente = idPaciente;
}
public Date getDataConsulta() {
return dataConsulta;
}
public void setDataConsulta(Date dataConsulta) {
this.dataConsulta = dataConsulta;
}
public String getTipoConsulta() {
return tipoConsulta;
}
public void setTipoConsulta(String tipoConsulta) {
this.tipoConsulta = tipoConsulta;
}
public Medico getIdMedico() {
return idMedico;
}
public void setIdMedico(Medico idMedico) {
this.idMedico = idMedico;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
Consulta xhtml
<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">
<h:head>
<link rel="StyleSheet" type="txt/css" href="css/estilo.css" media="screen" />
</h:head>
<body>
<div id="topo">
</div>
<div id="conteudo">
<h:form id="form" style="width: 99%; font-size:11px;color: #0000ff;">
<h:panelGrid columns="2" cellpadding="2" border="0" style="width:100%">
<p:outputLabel styleClass="titulo" value="Registro de Consulta Médica"/>
<h:inputHidden value="#{novaConsultaBean.selectPaciente.id}" />
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Paciente:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.nome}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Data Nascimento:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.nascimento}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Endereço:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.endereco}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Bairro:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.bairro}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Complemento:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.complemento}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="CEP:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.cep}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Cidade:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.cidade}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Estado:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.estado}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Telefone:" />
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.telefone}"/>
<p:outputLabel styleClass="texto" style="font-weight:bold;" value="Celular:"/>
<p:outputLabel styleClass="texto" value="#{novaConsultaBean.selectPaciente.celular}"/>
</h:panelGrid>
<hr size="1px" class="panel"/>
<h:panelGrid styleClass="panel" id="formulario" columns="2" cellpadding="2" border="0" style="width:100%">
<p:outputLabel styleClass="textoForm" value="Médico:" />
<p:selectOneMenu styleClass="inputForm" value="#{consultaBean.consulta.idMedico}" converter="pessoaConverter">
<f:selectItem itemValue="" itemLabel="Escolha um Médico" />
<f:selectItems value="#{consultaBean.medicos}" var="m" itemLabel="#{m.nome}" />
</p:selectOneMenu>
<p:outputLabel value="Tipo de Consulta:" styleClass="textoForm"/>
<p:selectOneMenu styleClass="inputForm" value="#{consultaBean.consulta.tipoConsulta}">
<f:selectItem itemValue="Retorno" itemLabel="Retorno"/>
<f:selectItem itemValue="Consulta" itemLabel="Consulta"/>
<f:selectItem itemValue="Vacinacao" itemLabel="Vacinação"/>
</p:selectOneMenu>
<p:outputLabel value="Situação:" styleClass="textoForm"/>
<p:selectOneMenu styleClass="inputForm" value="#{consultaBean.consulta.situacao}">
<f:selectItem itemValue="A" itemLabel="Atendido"/>
<f:selectItem itemValue="T" itemLabel="Triagem"/>
<f:selectItem itemValue="AT" itemLabel="Aguardando Triagem"/>
<f:selectItem itemValue="AA" itemLabel="Aguardando Atendimento"/>
</p:selectOneMenu>
<p:outputLabel styleClass="textoForm" value="Data da Consulta:"/>
<p:calendar styleClass="inputForm" value="#{consultaBean.consulta.dataConsulta}" />
<p:outputLabel styleClass="textoForm" value="Paciente:" />
<p:selectOneMenu styleClass="inputForm" value="#{consultaBean.consulta.idPaciente}">
<f:selectItem itemValue="#{novaConsultaBean.selectPaciente.id}" itemLabel="#{novaConsultaBean.selectPaciente.nome}"/>
</p:selectOneMenu>
<h:inputHidden value="#{consultaBean.consulta.id}" />
</h:panelGrid>
<p:commandButton value="Inserir"
action="#{consultaBean.Adicionar()}"
update="@form"
type="submit"/>
</h:form>
</div>
<div id="rodape">
</div>
</body>
</html>
pessoaConverter
package br.com.pew.converter;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import br.com.pew.model.Pessoa;
@FacesConverter(value = "pessoaConverter", forClass = Pessoa.class)
public class pessoaConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component,
String value) {
if (value != null) {
return this.getAttributesFrom(component).get(value);
}
return null;
}
public String getAsString(FacesContext ctx, UIComponent component,
Object value) {
if (value != null && ! "".equals(value)) {
Pessoa pessoa = (Pessoa) value;
if (pessoa.getId() != null) {
this.addAttribute(component, pessoa);
if (pessoa.getId() != null) {
return String.valueOf(pessoa.getId());
}
return (String) value;
}
}
return "";
}
private void addAttribute(UIComponent component, Pessoa o) {
this.getAttributesFrom(component).put(o.getId().toString(), o);
}
private Map<String, Object> getAttributesFrom(UIComponent component) {
return component.getAttributes();
}
}