[RESOLVIDO]Problemas com commandButton [urgente]

2 respostas
M

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();
	    }
	 
}

2 Respostas

igor_ks

tenta por um ajax=false no commandButton

M

Igor, tentei deste modo e tb não deu certo, então coloquei <p:messages id=“msg” … /> e vi que o problema estava no componente <p:selectOneMenu> onde neste componente eu passar um valor fixo que era o id do paciente selecionado, para gravar na tabela como mestre, porém ele tentava converter e dava valor null, por isso o erro. A unica solução que encontrei e que não é das melhores foi montar um list e listar no <f:selectItems /> todos os pacientes. O que eu queria mesmo era já passar esse Id fixo, pois eu seleciono o paciente em uma tela anterior. Mas não foi possível. Se alguém no fórum tiver uma sugestão para isso, só reabrir o fórum passando o algorítimo. No mais, está solucionado. Vlw pela ajuda!

Criado 10 de novembro de 2013
Ultima resposta 11 de nov. de 2013
Respostas 2
Participantes 2