Ajuda - Selecionar um item específico de um data table(PrimeFaces)

Bom dia pessoal, seguinte estou conseguindo popular meu data table com todos os dados do banco
está vindo certinho.

Agora estou tentando fazer o seguinte, coloquei uma coluna a mais no meu data table onde ao clicar abriria um dialog com as informações detalhadas da linha selecionada.

Se alguem puder me dar uma luz, eu agradeço

segue o código da pagina:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title></title>
    </h:head>

    <!--Página responsável pelo cadastro dos personagens do jogador -->
    <ui:composition template="/template/template.xhtml">

        <ui:define name="conteudo">

            <div>
                <p:dataTable value="#{personagemMB.listarPersonagens()}" var="personagem" paginator="true" rows="3">
                    <f:facet name="header">
                        Lista de Personagens
                    </f:facet>

                    <p:column headerText="Nome">
                        <h:outputText value="#{personagem.nome}"/>
                    </p:column>
                    
                    <p:column headerText="Classe">
                        <h:outputText value="#{personagem.classe}"/>
                    </p:column>
                    
                    <p:column headerText="Raça">
                        <h:outputText value="#{personagem.raca}"/>
                    </p:column>
                    
                    <p:column headerText="Alterar">
                        <p:commandButton id="SelectButton" update="detalhesPainel" onclick="personagem.show();" icon="ui-icon-search" title="Alterar" type="button">
                            <f:setPropertyActionListener target="#{personagemMB.personagemSelecionado}" value="#{personagem}" />
                        </p:commandButton>
                    </p:column>
                
                </p:dataTable> 

                <p:dialog header="Detalhes / Alterar" widgetVar="personagem" resizable="false" id="personagemDialog" showEffect="fade"
                          hideEffect="explode" >

                    <p:panelGrid id="detalhesPainel" columns="2">
                        <h:outputText value="Nome" />
                        <h:outputText value="#{personagemMB.personagemSelecionado.nome}"/>
                    </p:panelGrid>

                </p:dialog>

            </div>

        </ui:define>

    </ui:composition>

</html>

Meu bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.jragonha.mbeans;

import br.com.jragonha.bd.PersonagemDAO;
import br.com.jragonha.models.Classe;
import br.com.jragonha.models.Personagem;
import br.com.jragonha.models.Raca;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author jilles ragonha
 */
@ManagedBean
@RequestScoped
public class PersonagemMB implements Serializable {

    private Personagem personagemSelecionado;
    private Personagem personagem = new Personagem();
    private List<Classe> classes = new ArrayList<Classe>();
    private List<Raca> racas = new ArrayList<Raca>();
    private PersonagemDAO dao = new PersonagemDAO();
    List<Personagem> personagens = new ArrayList<Personagem>();
    String outcome;

    public List<Raca> getRacas() {
        return racas;
    }

    public Personagem getPersonagemSelecionado() {
        return personagemSelecionado;
    }

    public void setPersonagemSelecionado(Personagem personagemSelecionado) {
        this.personagemSelecionado = personagemSelecionado;
    }

    public void setRacas(List<Raca> racas) {
        this.racas = racas;
    }

    public List<Classe> getClasses() {
        return classes;
    }

    public void setClasses(List<Classe> classes) {
        this.classes = classes;
    }

    public PersonagemDAO getDao() {
        return dao;
    }

    public void setDao(PersonagemDAO dao) {
        this.dao = dao;
    }

    public Personagem getPersonagem() {
        return personagem;
    }

    public void setPersonagem(Personagem personagem) {
        this.personagem = personagem;
    }

    /**
     * Método usado para salvar o personagem em um banco
     *
     * @return
     */
    public String salvarPersonagem() {
        if (dao.salvar(personagem)) {
            outcome = "SALVO";
        }
        return outcome;
    }

    /**
     * Método que carrega todas as classes existentes no banco
     *
     * @return ArrayList com todas as classes
     */
    public List<Classe> listarClasses() {
        classes = dao.listarClasses();
        return classes;
    }

    /**
     * Método que carrega todas as reças vindas do banco de dados em um
     * selectOneMenu
     *
     * @return ArrayList com todas as raças
     */
    public List<Raca> listarRacas() {
        racas = dao.listarRacas();
        return racas;
    }

    public List<Personagem> listarPersonagens() {
        personagens = dao.listar();

        return personagens;
    }

    public String editarPersonagem() {

        String outcome;
        outcome = "ATUALIZAR";
        return outcome;
    }

    public String deletarPersonagem() {
        String outcome = null;
        if (dao.remover(personagem)) {
            outcome = "DELETADO";
        }
        return outcome;

    }

    public String atualizarPersonagem(Personagem personagem) {
        this.personagem = personagem;
        String outcome = null;

        if (dao.atualizar(personagem)) {
            outcome = "ATUALIZADO";
        }

        return outcome;
    }

    public void limpar() {
        if (personagem != null) {
            personagem = null;
        }
    }
}

Bom o que esta acontecendo é o seguinte, do jeito que esta atualmente, ele abre o dialog, porem ele nao vem com nenhum dado

agradeço qualquer ajuda: abraços

Já pensou em usar um DataModel no lugar da List para preencher os dados da datatable?

Com DataModel tudo fica mais fácil!

http://www.primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf

Coloque : em update=":detalhesPainel".

Show de bola hehe, vou tentar aqui :smiley: jaja posto o resultado
valew

Acabei de testar aqui e funcionou. Coloque <h:form> também.

&lt;html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:p="http://primefaces.org/ui"  
      xmlns:f="http://java.sun.com/jsf/core"  
      xmlns:ui="http://java.sun.com/jsf/facelets"  
      xmlns:h="http://java.sun.com/jsf/html"&gt;  
    &lt;h:head&gt;  
        &lt;title&gt;&lt;/title&gt;  
    &lt;/h:head&gt;  
  
    &lt;!--Página responsável pelo cadastro dos personagens do jogador --&gt;  
    &lt;ui:composition template="/template/template.xhtml"&gt;  
  
        &lt;ui:define name="conteudo"&gt;  
           &lt;h:form id="form"&gt;
            &lt;div&gt;  
                &lt;p:dataTable value="#{personagemMB.listarPersonagens()}" var="personagem" paginator="true" rows="3"&gt;  
                    &lt;f:facet name="header"&gt;  
                        Lista de Personagens  
                    &lt;/f:facet&gt;  
  
                    &lt;p:column headerText="Nome"&gt;  
                        &lt;h:outputText value="#{personagem.nome}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Classe"&gt;  
                        &lt;h:outputText value="#{personagem.classe}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Raça"&gt;  
                        &lt;h:outputText value="#{personagem.raca}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Alterar"&gt;  
                        &lt;p:commandButton id="selectButton" update=":form:detalhesPainel" onclick="personagem.show()" icon="ui-icon-search" title="View"&gt;  
			        &lt;f:setPropertyActionListener value="#{personagem}" target="#{personagemMB.personagemSelecionado}" /&gt;  
			 &lt;/p:commandButton&gt;  
                    &lt;/p:column&gt;  
                  
                &lt;/p:dataTable&gt;   
  
                &lt;p:dialog header="Detalhes / Alterar" widgetVar="personagem" resizable="false" id="personagemDialog" showEffect="fade"  
                          hideEffect="explode" &gt;  
  
                    &lt;p:panelGrid id="detalhesPainel" columns="2"&gt;  
                        &lt;h:outputText value="Nome" /&gt;  
                        &lt;h:outputText value="#{personagemMB.personagemSelecionado.nome}"/&gt;  
                    &lt;/p:panelGrid&gt;  
  
                &lt;/p:dialog&gt;  
  
            &lt;/div&gt;  
            &lt;/h:form&gt;
        &lt;/ui:define&gt;  
  
    &lt;/ui:composition&gt;  
  
&lt;/html&gt; 

cara, coloquei o h:form e mudei o update tb
porém meu dialog abre, mas não puxa o dado da linha do botao que eu clico
Os valores estão vindo vazio

Executei aqui e funcionou, a única diferença é que não usei template. Faz um clean no seu projeto (Project >> Clean) e certifique que seu template não possua a tag <h:form>.

Segue meu código completo, sem template.

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;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"&gt;
&lt;f:view contentType="text/html"&gt;
	&lt;h:head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
		&lt;title&gt;&lt;h:outputText value="#{msg['titulo']}" /&gt;&lt;/title&gt;
		&lt;link type="text/css" rel="stylesheet"
			href="#{request.contextPath}/resources/css/estilo.css" /&gt;
	&lt;/h:head&gt;
	&lt;h:body&gt;
	&lt;h:form id="form"&gt;
	  &lt;div&gt;  
                &lt;p:dataTable value="#{personagemMB.listarPersonagens()}" var="personagem" paginator="true" rows="3"&gt;  
                    &lt;f:facet name="header"&gt;  
                        Lista de Personagens  
                    &lt;/f:facet&gt;  
  
                    &lt;p:column headerText="Nome"&gt;  
                        &lt;h:outputText value="#{personagem.nome}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Classe"&gt;  
                        &lt;h:outputText value="#{personagem.nome}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Raça"&gt;  
                        &lt;h:outputText value="#{personagem.nome}"/&gt;  
                    &lt;/p:column&gt;  
                      
                    &lt;p:column headerText="Alterar"&gt;  
                        &lt;p:commandButton id="selectButton" update=":form:detalhesPainel" onclick="personagem.show();" icon="ui-icon-search" title="Alterar"&gt;  
			                &lt;f:setPropertyActionListener value="#{personagem}" target="#{personagemMB.personagemSelecionado}" /&gt;  
			            &lt;/p:commandButton&gt;  
  
                    &lt;/p:column&gt;  
                  
                &lt;/p:dataTable&gt;   
  
                &lt;p:dialog header="Detalhes / Alterar" widgetVar="personagem" resizable="false" id="personagemDialog" showEffect="fade"  
                          hideEffect="explode" &gt;  
  
                    &lt;p:panelGrid id="detalhesPainel" columns="2"&gt;  
                        &lt;h:outputText value="Nome" /&gt;  
                        &lt;h:outputText value="#{personagemMB.personagemSelecionado.nome}"/&gt;  
                    &lt;/p:panelGrid&gt;  
  
                &lt;/p:dialog&gt;  
  
            &lt;/div&gt;  
            &lt;/h:form&gt;
            &lt;/h:body&gt;
&lt;/f:view&gt;
&lt;/html&gt;
package br.com.linestetic.sisgestao.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import br.com.linestetic.sisgestao.model.Usuario;
  
/** 
* 
* @author jilles ragonha 
*/  
@ManagedBean  
@RequestScoped  
public class PersonagemMB implements Serializable {  
  
    private Usuario personagemSelecionado;  
   
    public Usuario getPersonagemSelecionado() { 
        return personagemSelecionado;  
    }  
  
    public void setPersonagemSelecionado(Usuario personagemSelecionado) {
        this.personagemSelecionado = personagemSelecionado;  
    } 
    public List&lt;Usuario&gt; listarPersonagens() {  
        List&lt;Usuario&gt; l = new ArrayList&lt;&gt;();
        Usuario u = new Usuario();
        u.setNome(&quot;Raul Seixas&quot;);
        l.add(u);
        return l;
    }  
}  

he, novamente nada, ele abre o dialog mas ainda não aparece nenhum valor

:frowning:

UOWEWWWWWWWWWW
funfo

ahuhuahuahuahua
Kara, muitissimo obrigado pela ajuda

virei seu fã ehheeh
abraços e brigadão msm