Busca em JSF nula

4 respostas
asandro1501

Boa tarde Pessoal

Tenho uma página que faz uma busca e me retorna o resultado dentro de um datatable, gostaria que o resultado voltasse dentro de inputText mas não consegui nada até agora.
Se puderem me ajudar eu agradeço.

Parte do código bean
public List<Paciente> getPacientePorId() {
        List<Paciente> bpacientesId = new ArrayList<Paciente>();
        String sql = "select * from paciente where codPaciente like ?";

        try {
            PreparedStatement stmt = this.conexao.prepareStatement(sql);
             stmt.setInt(1,getPaciente().getCodPaciente());

            ResultSet rs = stmt.executeQuery();


        while (rs.next()) {
            Paciente pac = new Paciente();

            int codigo = rs.getInt("codPaciente");
            String nome = rs.getString("nomePaciente");
            String rg = rs.getString("rg");
            String cpf = rs.getString("cpf");
            Date data = rs.getDate("dataNascimento");
            String endereco = rs.getString("endereco");
            String cidade = rs.getString("cidade");
            String estado = rs.getString("estado");

            pac.setCodPaciente(codigo);
            pac.setNomePaciente(nome);
            pac.setRg(rg);
            pac.setCpf(cpf);
            pac.setDataNacimento(data);
            pac.setEndereco(endereco);
            pac.setCidade(cidade);
            pac.setEstado(estado);

            bpacientesId.add(pac);
            }

        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return bpacientesId;

    }
Página de busca pelo ID do paciente
<ui:composition template="template.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:define name="title"> Busca de Paciente </ui:define>
    <ui:define name="content">

        <h:form >
            <p:panel style="width: 800PX" >

                <h:panelGrid columns="2"  >
                    <p:panel style="width: 300PX" header="Pesquisar pelo Código" >
                        <h:inputText value="#{pacienteBean.paciente.codPaciente}"/>
                        <h:commandButton value="Pesquisar" action="BuscaPacientePorId.jsf" actionListener="#{pacienteBean.pacientePorId}"/>                        

                    </p:panel>
                </h:panelGrid>

                <p:dataTable  value="#{pacienteBean.pacientePorId}"  id="tabela" var="pac"  paginator="true" rows="20" scrollable="true" height="400"
                              selectionMode="single" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                              rowsPerPageTemplate="5,10,15,20,25">
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Código" />
                        </f:facet>
                        <h:outputText value="#{pac.codPaciente}"  />
                    </p:column>

                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Nome" />
                        </f:facet>
                        <h:outputText value="#{pac.nomePaciente}" />
                    </p:column>

                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="RG" />
                        </f:facet>
                        <h:outputText value="#{pac.rg}" />
                    </p:column>

                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="CPF" />
                        </f:facet>
                        <h:outputText value="#{pac.cpf}" />
                    </p:column>

                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Nascimento"/>

                        </f:facet>
                        <h:outputText value="#{pac.dataNacimento}" />
                    </p:column>
                </p:dataTable>


                <p:panel >
                    <h:panelGrid columns="2" >

                        <h:outputText value="Nome"/>
                        <h:inputText id="nomePaciente" value="#{pacienteBean.paciente.nomePaciente}"  />

                        <h:outputText value="RG"/>
                        <h:inputText id="rg" value="#{pacienteBean.paciente.rg}"/>
                    </h:panelGrid>
                </p:panel>

            </p:panel>
        </h:form>
    </ui:define>
</ui:composition>

O datatable retorna o resultado certinho mas os inputText ficam vazios

4 Respostas

benignoms

Alex,

Você usa JSF 2.0? Qual o escopo do managed bean? Acho que existe uma forma melhor de você realizar esta busca.

Tente substituir o seu botão:

<h:commandButton value="Pesquisar" action="BuscaPacientePorId.jsf" actionListener="#{pacienteBean.pacientePorId}"/>

Po ester:

<p:commandButton value="Pesquisar" actionListener="#{pacienteBean.pacientePorId}" ajax="true" update="tabela"/>

A pesquisa será realizada com ajax.

asandro1501

Estou usando o jsf 2.0 sim

Segue todo o meu bean
package bean;

import dao.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import modelo.Paciente;

@ManagedBean
@RequestScoped
public class PacienteBean {

    Connection conexao = new FabricaConexao().fazConexao(); //Cria uma nova conexao  ao banco de dados
    //**********************************************
    //Criação do BackBean
    private Paciente paciente = new Paciente();
    private Paciente pacienteSelecionado = new Paciente();

    public Paciente getPaciente() {
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    //**********************************************
    //Criação do ManagedBean
    //Metod de gravação de um novo paciente
    public void gravaPaciente() {
        String sql = "insert into paciente(nomePaciente,rg,cpf,dataNascimento,endereco,cidade,estado)"
                + "values (?,?,?,?,?,?,?)";  //String que recebe o código sql usado na inserção

        PreparedStatement Pstmt;
        try {
            Pstmt = this.conexao.prepareStatement(sql);  //Amarra a instrução sql na conexao
            Pstmt.setString(1, paciente.getNomePaciente());//Envia atravé statement o valor na posição 1 o valor pego no form
            Pstmt.setString(2, paciente.getRg());
            Pstmt.setString(3, paciente.getCpf());

            //setDate é um sql.Date, não aceita o que vem do contato que é um util.Date
            //então é feita uma conversão para sql.Date e transformado em milisegundos(tipo long)
            Pstmt.setDate(4, new java.sql.Date(paciente.getDataNacimento().getTime()));
            Pstmt.setString(5, paciente.getEndereco());
            Pstmt.setString(6, paciente.getCidade());
            Pstmt.setString(7, paciente.getEstado());

            Pstmt.execute(); //Executa a instrução sql

        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

////////////////////////////////////////////////////
    //Este método retorna uma lista com os pacientes ordenados por nome
    public List<Paciente> getPacientes() {
        List<Paciente> pacientes = new ArrayList<Paciente>();

        String sql = "select * from paciente order by nomePaciente";
        PreparedStatement stmt;


        try {
            stmt = this.conexao.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery(sql);

            while (rs.next()) {
                Paciente paciente = new Paciente();

                int codigo = rs.getInt("codPaciente");
                String nome = rs.getString("nomePaciente");
                String rg = rs.getString("rg");
                String cpf = rs.getString("cpf");
                Date data = rs.getDate("dataNascimento");
                String endereco = rs.getString("endereco");
                String cidade = rs.getString("cidade");
                String estado = rs.getString("estado");

                paciente.setCodPaciente(codigo);
                paciente.setNomePaciente(nome);
                paciente.setRg(rg);
                paciente.setCpf(cpf);
                paciente.setDataNacimento(data);
                paciente.setEndereco(endereco);
                paciente.setCidade(cidade);
                paciente.setEstado(estado);

                pacientes.add(paciente);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return pacientes;
    }

////////////////////////////////////////////////////////////
    //Este método retorna uma lista de bpacientes de acordo com a string informada
    public List<Paciente> getBuscaPacientes() {
        List<Paciente> bpacientes = new ArrayList<Paciente>();
        String sql = "select * from paciente where nomePaciente like ? order by nomePaciente";

        try {
            PreparedStatement stmt = this.conexao.prepareStatement(sql);
            stmt.setString(1, "%" + getPaciente().getNomePaciente() + "%");

            ResultSet rs = stmt.executeQuery();


            while (rs.next()) {
                Paciente pac = new Paciente();

                int codigo = rs.getInt("codPaciente");
                String nome = rs.getString("nomePaciente");
                String rg = rs.getString("rg");
                String cpf = rs.getString("cpf");
                Date data = rs.getDate("dataNascimento");
                String endereco = rs.getString("endereco");
                String cidade = rs.getString("cidade");
                String estado = rs.getString("estado");

                pac.setCodPaciente(codigo);
                pac.setNomePaciente(nome);
                pac.setRg(rg);
                pac.setCpf(cpf);
                pac.setDataNacimento(data);
                pac.setEndereco(endereco);
                pac.setCidade(cidade);
                pac.setEstado(estado);


                bpacientes.add(pac);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return bpacientes;

    }

///////////////////////////////////////////////////////
//Este método deve retornar um paciente específico, conforme ID informado
//Será utilizado para exclusões, alterações,etc.
    public List<Paciente> getPacientePorId() {
        List<Paciente> bpacientesId = new ArrayList<Paciente>();
        String sql = "select * from paciente where codPaciente like ?";

        try {
            PreparedStatement stmt = this.conexao.prepareStatement(sql);
             stmt.setInt(1,getPaciente().getCodPaciente());

            ResultSet rs = stmt.executeQuery();


        while (rs.next()) {
            Paciente pac = new Paciente();

            int codigo = rs.getInt("codPaciente");
            String nome = rs.getString("nomePaciente");
            String rg = rs.getString("rg");
            String cpf = rs.getString("cpf");
            Date data = rs.getDate("dataNascimento");
            String endereco = rs.getString("endereco");
            String cidade = rs.getString("cidade");
            String estado = rs.getString("estado");

            pac.setCodPaciente(codigo);
            pac.setNomePaciente(nome);
            pac.setRg(rg);
            pac.setCpf(cpf);
            pac.setDataNacimento(data);
            pac.setEndereco(endereco);
            pac.setCidade(cidade);
            pac.setEstado(estado);

            bpacientesId.add(pac);
            }

        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return bpacientesId;

    }
////////////////////////////////////////////////////////////////

//Este método deleta um paciente de acordo com o codPaciente informado na página
    public void deletaPaciente() {
        String sql = "delete  from paciente  where codPaciente like ?";
        PreparedStatement stmt;

        try {
            stmt = this.conexao.prepareStatement(sql);
            stmt.setLong(1, getPaciente().getCodPaciente());
            stmt.execute();

        } catch (SQLException ex) {
            Logger.getLogger(PacienteBean.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}
Segue também minha classe modelo
/*
* Classe modelo de Pacientes
* Criada em 20/10/2010
*/

package modelo;

import java.util.Date;


public class Paciente {
private int codPaciente;
private String nomePaciente;
private String rg;
private String cpf;
private Date dataNacimento;
private String endereco;
private String cidade;
private String estado;

public String getCidade() {
return cidade;
}

public void setCidade(String cidade) {
this.cidade = cidade;
}


public int getCodPaciente() {
return codPaciente;
}

public void setCodPaciente(int codPaciente) {
this.codPaciente = codPaciente;
}

public String getCpf() {
return cpf;
}

public void setCpf(String cpf) {
this.cpf = cpf;
}

public Date getDataNacimento() {
return dataNacimento;
}

public void setDataNacimento(Date dataNacimento) {
this.dataNacimento = dataNacimento;
}

public String getEndereco() {
return endereco;
}

public void setEndereco(String endereco) {
this.endereco = endereco;
}

public String getEstado() {
return estado;
}

public void setEstado(String estado) {
this.estado = estado;
}

public String getNomePaciente() {
return nomePaciente;
}

public void setNomePaciente(String nomePaciente) {
this.nomePaciente = nomePaciente;
}

public String getRg() {
return rg;
}

public void setRg(String rg) {
this.rg = rg;
}

}

A alteração não deu certo, o resultado continua igual

benignoms

Mude o escopo do ManagedBean para @SessionScoped

asandro1501

Ainda não funcionou

Criado 4 de novembro de 2010
Ultima resposta 4 de nov. de 2010
Respostas 4
Participantes 2