Problema com p:datatable

Bom dia a todos, estou com um problema na datatable que é o seguinte:

Tenho a tabela que mostra os dados e quando eu clico em uma linha abre o p:dialog, porém quando abre o dialog sempre vem com as informações do último registro, mesmo que eu clique no primeiro vem no útilmo. Segue o código

página web:

<p:dataTable id="participantes"  var="par" value="#{participantes.listAll}" paginator="true" rows="5" 
   selection="#{participantes.part}" selectionMode="single" emptyMessage="Não tem participantes cadastrado!"  
   rowKey="#{participantes.id_participante}">

     <p:ajax event="rowSelect" update=":pageone:display, :pageone:mensa" oncomplete="UsuarioPOP.show()" 
                  listener="#{participantes.onRowSelect}" />
       <p:ajax event="rowUnselect" listener="#{participantes.onRowUnselect}" update=":pageone:mensa"/>
                            <f:facet name="header">
                                Participantes
                            </f:facet>
                            <p:column id="idParticipante" headerText="ID">
                                #{par.id_participante}
                            </p:column>
                            <p:column id="nomeParticipante" headerText="Nome Completo">
                                #{par.fullName}
                            </p:column>
                            <p:column id="nomeInstituicao" headerText="Institução">
                                #{par.instituicao}

                            </p:column>
                            <p:column id="dataInscricao" headerText="Data de Inscrição">

                            </p:column>
                        </p:dataTable>
                        <p:dialog id="dialog" header="Informação do Participante" widgetVar="UsuarioPOP"
                                       resizable="false"width="490" showEffect="clip" hideEffect="fold">

                            <h:panelGrid id="display" columns="2" cellpadding="4">

                                <h:outputLabel for="IDP" value="ID *" />
                                <p:inputText id="IDP" value="#{participantes.part.id_participante}"/>

                                <h:outputLabel for="firstname" value="Nome Completo: *" />
                                <p:inputText id="firstname" value="#{participantes.part.fullName}" 
                                             label="Nome Completo" />

                                <h:outputLabel for="instituicao" value="Instituição de Ensino: *" />
                                <p:inputText id="instituicao" value="#{participantes.part.instituicao}" required="true" 
                                                    label="Instituição de Ensino"/>

                                <h:outputLabel for="email" value="Email: *" />
                                <p:inputText id="email" value="#{participantes.part.email}" required="true"
                                             label="Email"/>

                                <h:outputLabel for="phone" value="Telefone: *" />
                                <p:inputMask id="phone" value="#{participantes.part.telefone}" required="true"
                                            label="Telefone"mask="(99)9999-9999"/>

                                <h:outputLabel for="cargo" value="Cargo em TI: *" />
                                <p:inputText id="cargo" value="#{participantes.part.cargo}" required="true" 
                                                    label="Cargo que atualmente exerce"/>

                                <h:outputLabel for="aljug" value="Participa do Grupo Aljug: *" />
                                <p:selectOneMenu id="aljug" value="#{participantes.part.aljug}">
                                    <f:selectItem itemLabel="- Selecione - "/>
                                    <f:selectItem itemLabel="Sim" itemValue="Sim"/>
                                    <f:selectItem itemLabel="Não" itemValue="Não"/>
                                </p:selectOneMenu>
                            </h:panelGrid>
                        </p:dialog>
    

Bean:


    private Participante part;
    private List<Participante> list;

  public List<Participante> getListAll() throws SQLException {

        Statement statement = null;
        list = new ArrayList<Participante>();
        Conn = FactoryConnection.getConnection(User, Pass);
        String sql = "SELECT * FROM participantes";

        try {

            statement = Conn.createStatement();
            System.out.println(sql);

            ResultSet rs = statement.executeQuery(sql);
            
            while (rs.next()) {
                part = new Participante();
               
                part.setId_participante(rs.getInt("idparticipante"));
                part.setFullName(rs.getString("fullname"));
                part.setInstituicao(rs.getString("instituicao"));
                part.setEmail(rs.getString("email"));
                part.setTelefone(rs.getString("telefone"));
                part.setCargo(rs.getString("cargo"));
                part.setAljug(rs.getString("aljuggrupo"));

                list.add(part);
            }

        } catch (SQLException e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não pode buscar dado!", "Erro inesperado, motivo: " + e.getMessage()));
            System.out.println(e.getMessage());
            Conn.close();
        }

        return list;
    }

Miguel,

No seu evento rowSelect, manda atualizar o dialog… update= :pageone:diloag, presumindo que pagegone seja o id do formulário da página.

 &lt;p:ajax event="rowSelect" update=":pageone:display, :pageone:mensa, :pageone:dialog" oncomplete="UsuarioPOP.show()" 
                  listener="#{participantes.onRowSelect}" /&gt;

Exato, <h:form id="pageone">

Testei o que falaste e estar do mesmo jeito, pude observar agora no método:


     public void onRowSelect(SelectEvent event) {
            FacesMessage msg;
            msg = new FacesMessage("Participante Selecionado", ((Participante) event.getObject()).getFullName());
            System.out.println("ID: "+event.getObject());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }

Que o ID só retorna o numeral 1.

Miguel,

No evento onRowSelect, você tem que setar os dados selecionados… Os valores não são setados automáticamente…

Veja se isso te ajuda…

 public void onRowSelect(SelectEvent event) {
        usuarioSelecionado.setNomeTratamento(usuarioSelecionado.getNomeTratamento());
        usuarioSelecionado.setNomeCompleto(usuarioSelecionado.getNomeCompleto());
        usuarioSelecionado.setFormaTratamento(usuarioSelecionado.getFormaTratamento());
        usuarioSelecionado.setLogin(usuarioSelecionado.getLogin());
        usuarioSelecionado.setRg(usuarioSelecionado.getRg());
        usuarioSelecionado.setCpf(usuarioSelecionado.getCpf());
        usuarioSelecionado.setDataNascimento(usuarioSelecionado.getDataNascimento());
        usuarioSelecionado.setTelefonePrincipal(usuarioSelecionado.getTelefonePrincipal());
        usuarioSelecionado.setTelefoneSecundario(usuarioSelecionado.getTelefoneSecundario());
        usuarioSelecionado.setCep(usuarioSelecionado.getCep());
        usuarioSelecionado.setBairro(usuarioSelecionado.getBairro());
        usuarioSelecionado.setCidade(usuarioSelecionado.getCidade());
        usuarioSelecionado.setComplemento(usuarioSelecionado.getComplemento());
        usuarioSelecionado.setEmail(usuarioSelecionado.getEmail());
        usuarioSelecionado.setLogradouro(usuarioSelecionado.getLogradouro());
        usuarioSelecionado.setNumero(usuarioSelecionado.getNumero());
        usuarioSelecionado.setUf(usuarioSelecionado.getUf());
        usuarioSelecionado.setSexo(usuarioSelecionado.getSexo());
    }
    &lt;p:dataTable&gt;
.
.
.
  &lt;p:ajax event="rowSelect" listener="#{perfilBean.onRowSelect}" oncomplete="dlg.show()" update=":formPrincipal:teste"/&gt;
                        &lt;/p:dataTable&gt;

&lt;p:dialog id="teste"
                                  widgetVar="dlg" 
                                  showEffect="fade"
                                  header="USUÁRIO SELECIONADO"
                                  minimizable="true"
                                  hideEffect="explode"
                                  resizable="false"                              
                                  draggable="false"
                                  styleClass="dialog"
                                  &gt;
                            &lt;p:growl id="growlAlterado" /&gt;

                            &lt;!--
                            &lt;p:ajax listener="clinica.atualizaSelectMascara" update="dialogFone, dialogFone2"/&gt;
                            --&gt;
                            &lt;p:panel&gt;
                                &lt;h:outputLabel value="CPF: " for="SelectCPF" class="obrigatorio"/&gt;
                                &lt;h:outputText value="#{perfilBean.usuarioSelecionado.cpf}" id="SelectCPF"/&gt;
                            &lt;/p:panel&gt;
                            <br/>

                            &lt;p:panel&gt;
                                &lt;h:outputLabel value="Nome Completo: " for="SelectNomeCompleto"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.nomeCompleto}"
                                             id="SelectNomeCompleto"
                                             size="50"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Nome Tratamento: " for="SelectNomeTratamento"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.nomeTratamento}"
                                             id="SelectNomeTratamento"
                                             size="50"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Forma Tratamento: " for="formaTratamento"
                                               class="obrigatorio"/&gt;
                                &lt;p:selectOneMenu id="formaTratamento" value="#{perfilBean.usuarioSelecionado.formaTratamento}"&gt;
                                    &lt;f:selectItem itemValue="caro" itemLabel="Caro"/&gt;
                                    &lt;f:selectItem itemValue="senhor" itemLabel="Senhor"/&gt;
                                    &lt;f:selectItem itemValue="doutor" itemLabel="Doutor"/&gt;
                                    &lt;f:selectItem itemValue="prezado" itemLabel="Prezado"/&gt;
                                    &lt;f:selectItem itemValue="" itemLabel="Nenhuma"/&gt;
                                &lt;/p:selectOneMenu&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="RG: " for="dialogRg"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.rg}"
                                             id="dialogRg"
                                             size="50"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Data de Nascimento: " for="dialogDn"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputMask id="dialogDn" mask="99/99/9999" value="#{perfilBean.usuarioSelecionado.dataNascimento}" 
                                             style="#{perfilBean.vDN}" converter="dataConverter"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Telefone: " for="dialogFone"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.telefonePrincipal}"
                                             id="dialogFone" converter="telefoneConverter"
                                             size="50"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Telefone (Auxiliar): " for="dialogFone2"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.telefoneSecundario}"
                                             id="dialogFone2" converter="telefoneConverter"
                                             size="50"/&gt;

                                <br/><br/>

                                &lt;h:outputLabel value="Email: " for="dialogEmail"
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.email}"
                                             id="dialogEmail"
                                             size="50"/&gt;

                                <br/><br/>



                            &lt;/p:panel&gt;
                            <br />
                            &lt;p:panel&gt;
                                &lt;h:outputLabel for="cep" value="CEP: * "/&gt;
                                &lt;p:spacer width="10px"/&gt;
                                &lt;p:inputMask id="diloagCep" mask="99-999-999" value="#{perfilBean.usuarioSelecionado.cep}" style="#{perfilBean.vCEP}" 
                                             converter="cepConverter"/&gt;

                                &lt;h:outputLabel value="Cidade: " for="SelectCidade" 
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.cidade}" 
                                             id="SelectCidade"/&gt;

                                &lt;h:outputLabel value="UF: " for="SelectUf" 
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.uf}" id="SelectUf"/&gt;

                                &lt;h:outputLabel value="Bairro: " for="SelectBairro" 
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.bairro}" id="SelectBairro"/&gt;
                                <br/><br/>

                                &lt;h:outputLabel value="Logradouro: " for="SelectLogradouro" 
                                               class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.logradouro}" 
                                             id="SelectLogradouro"
                                             size="30"/&gt;

                                &lt;h:outputLabel value="N&#65533;mero: " for="SelectNumero" class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.numero}" id="SelectNumero"/&gt;
                                <br/><br/>

                                &lt;h:outputLabel value="Complemento: " for="SelectComplemento" class="obrigatorio"/&gt;
                                &lt;p:inputText value="#{perfilBean.usuarioSelecionado.complemento}" id="SelectComplemento"/&gt;
                            &lt;/p:panel&gt;
                            <br/>
                            &lt;p:panelGrid columns="2"&gt;
                                &lt;p:commandLink id="btnAlterar" 
                                               value="Editar" 
                                               ajax="false" 
                                               type="button"
                                               update="pesquisa, growlAlterado"
                                               actionListener="#{perfilBean.updateUsuario}"/&gt;


                                &lt;p:commandLink id="btnExcluir" 
                                               value="Excluir" 
                                               ajax="false" 
                                               type="button"
                                               update="pesquisa, growlAlterado"
                                               actionListener="#{perfilBean.deleteUsuario}"/&gt;
                            &lt;/p:panelGrid&gt;
                        &lt;/p:dialog&gt;

testei a sua dica e não funcionou, mas com isso já vejo no terminal que por mais que eu clique em qualquer ID na datatable, ele me traz apenas o ultimo resultado,o problema é que não está conseguindo ver a linha que eu clico.

Posta o código da sua variável part… #{participante.part} e o método onRowSelect

@ManagedBean(name = "participantes")
@RequestScoped
public class Participante {

    private int Id_participante;
    private String FullName;
    private String Instituicao;
    private String Email;
    private String Telefone;
    private String Cargo;
    private String Aljug;
    private Connection Conn;
    private Participante part;
    private List<Participante> list;
  
     /**
     * Getter´s and setter´s
     */
     public List<Participante> getListAll() throws SQLException {

        PreparedStatement statement = null;
        list = new ArrayList<Participante>();
        Conn = FactoryConnection.getConnection("root", "root");
        String sql = "SELECT * FROM participantes";
        ResultSet rs;
        try {

           statement = Conn.prepareStatement("Select * From participantes"); //where idparticipante="+this.Id_participante+""
            rs = statement.executeQuery();
            
            while (rs.next()) {
                part = new Participante();
               
                part.setId_participante(rs.getInt("idparticipante"));
                part.setFullName(rs.getString("fullname"));
                part.setInstituicao(rs.getString("intituicao"));
                part.setEmail(rs.getString("email"));
                part.setTelefone(rs.getString("telefone"));
                part.setCargo(rs.getString("cargo"));
                part.setAljug(rs.getString("aljuggrupo"));

                list.add(part);
            }
                Conn.close();
        } catch (SQLException e) {
            FacesContext.getCurrentInstance().addMessage(null, 
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não pode buscar dado!", 
            "Erro inesperado, motivo: " + e.getMessage()));
            System.out.println(e.getMessage());
            Conn.close();
        }

public void onRowSelect(SelectEvent event) {
            part.setId_participante(part.getId_participante());
            part.setFullName(part.getFullName());
            part.setInstituicao(part.getInstituicao());
            part.setEmail(part.getEmail());
            part.setTelefone(part.getTelefone());
            part.setCargo(part.getCargo());
            part.setAljug( part.getAljug());
            
           
            
            FacesMessage msg;
            msg = new FacesMessage("Participante Selecionado",part.getFullName());
            System.out.println("ID: "+part.getId_participante());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }

[quote=MiguelCP][code]
@ManagedBean(name = “participantes”)
@RequestScoped
public class Participante {

private int Id_participante;
private String FullName;
private String Instituicao;
private String Email;
private String Telefone;
private String Cargo;
private String Aljug;
private Connection Conn;
private Participante part;
private List<Participante> list;

 /**
 * Getter´s and setter´s
 */
 public List<Participante> getListAll() throws SQLException {

    PreparedStatement statement = null;
    list = new ArrayList<Participante>();
    Conn = FactoryConnection.getConnection("root", "root");
    String sql = "SELECT * FROM participantes";
    ResultSet rs;
    try {

       statement = Conn.prepareStatement("Select * From participantes"); //where idparticipante="+this.Id_participante+""
        rs = statement.executeQuery();
        
        while (rs.next()) {
            part = new Participante();
           
            part.setId_participante(rs.getInt("idparticipante"));
            part.setFullName(rs.getString("fullname"));
            part.setInstituicao(rs.getString("intituicao"));
            part.setEmail(rs.getString("email"));
            part.setTelefone(rs.getString("telefone"));
            part.setCargo(rs.getString("cargo"));
            part.setAljug(rs.getString("aljuggrupo"));

            list.add(part);
        }
            Conn.close();
    } catch (SQLException e) {
        FacesContext.getCurrentInstance().addMessage(null, 
        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não pode buscar dado!", 
        "Erro inesperado, motivo: " + e.getMessage()));
        System.out.println(e.getMessage());
        Conn.close();
    }

public void onRowSelect(SelectEvent event) {
part.setId_participante(part.getId_participante());
part.setFullName(part.getFullName());
part.setInstituicao(part.getInstituicao());
part.setEmail(part.getEmail());
part.setTelefone(part.getTelefone());
part.setCargo(part.getCargo());
part.setAljug( part.getAljug());

        FacesMessage msg;
        msg = new FacesMessage("Participante Selecionado",part.getFullName());
        System.out.println("ID: "+part.getId_participante());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

[/code][/quote]

Cara, não tenho certeza, mas acho que o problema é porque está buscando no banco novamente…

Eu fiz da seguinte forma…

Para preencher o dataTable eu busco a lista do banco…

//Classe que busca lista de usuários no banco…

/*
     * searchUsers
     */
    public List searchUsers() {
        session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Criteria criterio = session.createCriteria(TbUsuario.class);
        List<TbUsuario> usuario = criterio.list();
        System.out.println("Registros encontrados: " + usuario.size());

        for (TbUsuario user : usuario) {
            System.out.println("CPF: " + user.getCpf());
            System.out.println("Perfi: " + user.getTbPerfil().getNome());
        }
        numeroUsuarios(usuario);
        session.close();
        return usuario;
    }

//Para preencher o dataTable chamo a variável listaUsuario. e No get dessa variável atribuo a pesquisa no banco…

private List<TbUsuario> listaUsuario;
 public List<TbUsuario> getListaUsuario() {
        return listaUsuario = PerfilController.searchUsers();
        
    }

//Getters and Setters...

//Crio um novo objeto de usuário para receber os dados do usuário que foi selecionado.
//Eu não faço a pesquisa direto no banco para para atualizar os dados do usuário selecionado, e sim na lista que já havia sido retornada…

private TbUsuario usuarioSelecionado = new TbUsuario();
 /*
     * Atualiza clinica consultada
     */
    public void usuarioSelecionado(SelectEvent event) {
        usuarioSelecionado.setNomeTratamento(usuarioSelecionado.getNomeTratamento());
        usuarioSelecionado.setNomeCompleto(usuarioSelecionado.getNomeCompleto());
        usuarioSelecionado.setFormaTratamento(usuarioSelecionado.getFormaTratamento());
        usuarioSelecionado.setLogin(usuarioSelecionado.getLogin());
        usuarioSelecionado.setRg(usuarioSelecionado.getRg());
        usuarioSelecionado.setCpf(usuarioSelecionado.getCpf());
        usuarioSelecionado.setDataNascimento(usuarioSelecionado.getDataNascimento());
        usuarioSelecionado.setTelefonePrincipal(usuarioSelecionado.getTelefonePrincipal());
        usuarioSelecionado.setTelefoneSecundario(usuarioSelecionado.getTelefoneSecundario());
        usuarioSelecionado.setCep(usuarioSelecionado.getCep());
        usuarioSelecionado.setBairro(usuarioSelecionado.getBairro());
        usuarioSelecionado.setCidade(usuarioSelecionado.getCidade());
        usuarioSelecionado.setComplemento(usuarioSelecionado.getComplemento());
        usuarioSelecionado.setEmail(usuarioSelecionado.getEmail());
        usuarioSelecionado.setLogradouro(usuarioSelecionado.getLogradouro());
        usuarioSelecionado.setNumero(usuarioSelecionado.getNumero());
        usuarioSelecionado.setUf(usuarioSelecionado.getUf());
        usuarioSelecionado.setSexo(usuarioSelecionado.getSexo());
    }

Espero ter ajudado em alguma coisa… xD

Muito obrigado pela ajuda… vou testar.