Pegar Dado Selecionado DataTable Primefaces

Pessoal,

já tenho 2 dias tentando resolver isso e não consigo, quero criar uma opção onde se faz uma busca dos alunos, seleciona o desejado e depois eu insiro ele em uma tabela. Mas eu já fiz diversas pesquisas e alterações e nunca consigo obter o objeto que foi selecionado, seguem os meus códigos, quem puder me dar uma luz vou agradecer muito.

package aprender.bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
/**
 *
 * @author raniere.sousa
 */
@ManagedBean
@RequestScoped
public class AlunoBean {
    private String matricula;
    private String nome;
    private String turma;
    private String sede;
    private String foto;
    private String auto;    /** Creates a new instance of AlunoBean */

    public AlunoBean()
    {
    }

    public AlunoBean(String wmatricula,String wnome,String wturma,String wsede,String wfoto,String wauto)
    {
        this.matricula = wmatricula;
        this.nome = wnome;
        this.turma = wturma;
        this.sede = wsede;
        this.foto = wfoto;
        this.auto = wauto;
    }

    /**
     * @return the matricula
     */
    public String getMatricula() {
        return matricula;
    }

    /**
     * @param matricula the matricula to set
     */
    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the turma
     */
    public String getTurma() {
        return turma;
    }

    /**
     * @param turma the turma to set
     */
    public void setTurma(String turma) {
        this.turma = turma;
    }

    /**
     * @return the sede
     */
    public String getSede() {
        return sede;
    }

    /**
     * @param sede the sede to set
     */
    public void setSede(String sede) {
        this.sede = sede;
    }

    /**
     * @return the foto
     */
    public String getFoto() {
        return foto;
    }

    /**
     * @param foto the foto to set
     */
    public void setFoto(String foto) {
        this.foto = foto;
    }

    /**
     * @return the auto
     */
    public String getAuto() {
        return auto;
    }

    /**
     * @param auto the auto to set
     */
    public void setAuto(String auto) {
        this.auto = auto;
    }


}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package aprender.bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.util.ArrayList;
import aprender.bean.AlunoBean;
import java.sql.*;
import aprender.util.AcessoBanco;
import javax.faces.context.FacesContext;
import javax.faces.application.FacesMessage;


/**
 *
 * @author raniere.sousa
 */
@ManagedBean
@RequestScoped
public class PesquisaAluno {
    private ArrayList ListadeAlunos = new ArrayList<AlunoBean>();
    private ArrayList ListadeAlunosSel = new ArrayList<AlunoBean>();
    private AlunoBean alunoaux;
    private AlunoBean alunosel;
    private AcessoBanco acesso;
    private String nomebuscar;
    private boolean mostratabela = false;
    /** Creates a new instance of PesquisaAluno */
    public PesquisaAluno() {

    }

    public void BuscaAlunos() {
        try
            {
                ListadeAlunos.clear();
                acesso = new AcessoBanco();
                ResultSet rs = acesso.Executar("SELECT * FROM VW_ALUNOS_PESQUISA WHERE NOME LIKE '%"+nomebuscar+"%'");
                while (rs.next())
                {
                    setAlunoaux(new AlunoBean(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6)));
                    ListadeAlunos.add(getAlunoaux());
                }
                this.setMostratabela(true);
            }
            catch (Exception e)
            {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro de conexão ao Banco", e.toString()));
            }

    }

    /**
     * @return the ListadeAlunos
     */
    public ArrayList getListadeAlunos() {
        return ListadeAlunos;
    }

    /**
     * @return the nomebuscar
     */
    public String getNomebuscar() {
        return nomebuscar;
    }

    /**
     * @param nomebuscar the nomebuscar to set
     */
    public void setNomebuscar(String nomebuscar) {
        this.nomebuscar = nomebuscar;
    }

    /**
     * @return the mostratabela
     */
    public boolean isMostratabela() {
        return mostratabela;
    }

    /**
     * @param mostratabela the mostratabela to set
     */
    public void setMostratabela(boolean mostratabela) {
        this.mostratabela = mostratabela;
    }

    /**
     * @return the ListadeAlunosSel
     */
    public ArrayList getListadeAlunosSel() {
        return ListadeAlunosSel;
    }

    public void AdicionaAlunoSel()
    {
        ListadeAlunosSel.add(getAlunosel());
        alunoaux = new AlunoBean("0000","Raniere","0","0","0","0");
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro de conexão ao Banco", "teste"+ListadeAlunosSel.size()+alunoaux.getNome()));
    }

    /**
     * @return the alunoaux
     */
    public AlunoBean getAlunoaux() {
        return alunoaux;
    }

    /**
     * @param alunoaux the alunoaux to set
     */
    public void setAlunoaux(AlunoBean alunoaux) {
        this.alunoaux = alunoaux;
    }

    /**
     * @return the alunosel
     */
    public AlunoBean getAlunosel() {
        return alunosel;
    }

    /**
     * @param alunosel the alunosel to set
     */
    public void setAlunosel(AlunoBean alunosel) {
        this.alunosel = alunosel;
    }
}
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        <h:form id="form" >
                        <h:panelGrid columns="4" style="margin-bottom:10px; font-size:12px ">
                            <h:outputLabel for="editbusca" value="Nome:" style=" font-weight: bold" />
                            <p:inputText id="editbusca" value="#{pesquisaAluno.nomebuscar}" />
                            <p:commandButton value="Buscar" update="tabalunos" action="#{pesquisaAluno.BuscaAlunos}" />

                        <p:ajaxStatus style="width:16px;height:16px;">
                            <f:facet name="start">
                                <h:graphicImage value="ajaxloader.gif" />
                            </f:facet>
                            <f:facet name="complete">
                                <h:outputText value="" />
                            </f:facet>
                        </p:ajaxStatus>

                        </h:panelGrid>
                        <h:panelGrid id="tabalunos">
                            <p:messages id="msgs" showDetail="true"/>

                            <p:dataTable id="tablepesq" var="alunoBean" value="#{pesquisaAluno.listadeAlunos}" selection="#{pesquisaAluno.alunosel}" selectionMode="single"
                                         style="font-size:10px " rendered="#{pesquisaAluno.mostratabela}" paginator="true" rows="10"   >
                                <p:column>
                                    <f:facet name="header" >
                                        Matrícula
                                    </f:facet>
                                    <h:outputText value="#{alunoBean.matricula}" />
                                </p:column>

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

                                <p:column>
                                    <f:facet name="header">
                                        Série
                                    </f:facet>
                                    <h:outputText value="#{alunoBean.turma}" />
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        Sede
                                    </f:facet>
                                    <h:outputText value="#{alunoBean.sede}" />
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        Possui Foto
                                    </f:facet>
                                    <h:outputText value="#{alunoBean.foto}" />
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        Autorizado
                                    </f:facet>
                                    <h:outputText value="#{alunoBean.auto}" />
                                </p:column>

                            </p:dataTable>

                        </h:panelGrid>
                        <p:commandButton value="Submit" update=":display" action="#{pesquisaAluno.AdicionaAlunoSel}" oncomplete="dlg.hide();"/>
                        <p:commandButton value="Testar" update="form:pnteste" oncomplete="DialogoRan.show()" >
                        </p:commandButton>

                        <p:dialog header="Testando cara" widgetVar="DialogoRan">
                        <h:panelGrid id="pnteste" >
                            <p:messages id="msgtst" showDetail="true"/>
                            <h:outputText value="Nome do Aluno" />
                            <h:outputText value="#{pesquisaAluno.alunosel.nome}" />
                        </h:panelGrid>
                        </p:dialog>
                    </h:form>

    </h:body>
</html>


Não sei o que acontece mas o Ajax da paginação também não funciona.

Grato pela ajuda.

Como você deseja recuperar o objeto selecionado, na hora em que clicar em algum lugar?

Na verdade, nesse momento eu estava fazendo um teste, de quando clicar no botão “Testar”, ele exibir o nome do aluno selecionado no dialog. Mas só exieb o título que coloquei no dialog, o nome do aluno fica em branco.

Faça o seguinte, dentro do p:dataTable coloque um link que, ao clicar, é setado um objeto através da tag f:setPropertyActionListener. Se não entender, vou te dar um exemplo aqui:

&lt;a4j:commandLink ajaxSingle="true" value="#{alunoBean.nome}" oncomplete="modalAluno.show();" reRender="modalAluno"&gt;
    &lt;f:setPropertyActionListener value="#{alunoBean}" target="#{pesquisaAluno.alunoaux}"/&gt;
&lt;/a4j:commandLink&gt;

Vai ficar mais ou menos desse jeito a passagem do aluno para a classe.
Por favor, responda se deu certo depois.

esdmorais,

eu nunca usei o a4j, como declaro ele no meu xhtml? Eu tentei fazer isso:
xmlns:a4j=“https://ajax4jsf.dev.java.net/ajax

mas o netbeans fica informando que não reconhece.

Valeu pela ajuda!

[quote=ranieriviana]esdmorais,

eu nunca usei o a4j, como declaro ele no meu xhtml? Eu tentei fazer isso:
xmlns:a4j=“https://ajax4jsf.dev.java.net/ajax

mas o netbeans fica informando que não reconhece.

Valeu pela ajuda![/quote]

É desse jeito mesmo, mas você precisa ter os jars do RichFaces também!
Você pode baixar ele aqui: http://www.jboss.org/richfaces
É de graça, a única coisa que você paga para ter (e se quiser) é a documentação, se não me engano custa + ou - US$ 2

[quote=esdmorais]Faça o seguinte, dentro do p:dataTable coloque um link que, ao clicar, é setado um objeto através da tag f:setPropertyActionListener. Se não entender, vou te dar um exemplo aqui:

&lt;a4j:commandLink ajaxSingle="true" value="#{alunoBean.nome}" oncomplete="modalAluno.show();" reRender="modalAluno"&gt;
    &lt;f:setPropertyActionListener value="#{alunoBean}" target="#{pesquisaAluno.alunoaux}"/&gt;
&lt;/a4j:commandLink&gt;

[/quote]

isso é igual usar o

&lt;p:commandLink value="#{alunoBean.nome}" oncomplete="modalAluno.show()" update="modalAluno"/&gt;

Pode ser também!
Eu não uso muito as coisas do PrimeFaces porque elas costumam sempre dar algum problema em outro componente aqui =/

o que vc quer fazer é isso aqui neh ?

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

Exatamente isso! Meu netbeans aqui deu pau por isso ainda não testei a sugestão de vcs. Mas eu vi uma difierença, não sei se é isso, mas no exemplo do primefaces a classe car não é bean e é serializable, será que isso influencia?

é um bean seralizado, eu uso em todos os meu beans ou seja:

@ManagedBean  
@RequestScoped  
public class PesquisaAluno implements java.io.Serializable {  
}

O problema pode ser o scopo tenta usar o ViewScoped antes de tudo

Polverini,

cara desculpe a ignorância, mas como eu uso o ViewScoped? Onde eu devo colocar?

Valeu pela ajuda.

Coloca no bean, assim:

@ManagedBean    
@ViewScoped   // <-Aqui muda
public class PesquisaAluno implements java.io.Serializable {    
}  

Pesquise sobre o ciclo de vida do jsf para mais informações de escopo

Polverini,

cara, SHOOOOOOOWWWWWWWWW!!!

Funcionou! Conseguiu exibir!

Man não tenho palavras para agradecer, valeu mesmo pela força!

E Obrigadão a esdmorais também que teve a boa vontade de ajudar, valeu pela força!!!

Abraço.

Galera, vou aproveitar para tirar uma dúvida, Sou iniciante no JSF com prime faces…

Tenho uma tabela e gostaria de ter um botao nesta tabela que quando o usuario clicar neste botão ele seta um cliente no meu bean… só isso!

<p:dataTable id="tbCliente" var="cli" value="#{ordemServicoBean.listaCliente}" emptyMessage="Nenhum registro encontrado." paginator="true" rows="10"> <f:facet name="header" > Clientes </f:facet> <p:column headerText="Nome"> <h:outputText value="#{cli.nome}" /> </p:column> <p:column style="width:30px; text-align: center"> <h:commandLink title="Selecionar" actionListener="#{ordemServicoBean.selecionaCliente(cli)}" oncomplete="dlgBuscaCliente.hide()" update=":formPrincipal:campoFiltro"> <p:graphicImage value="tema/icons/ok.png" /> </h:commandLink> </p:column>

Se coloco o Bean dessa tela como ViewScoped funciona que é uma beleza! Mas queria trabalhar com @RequestScoped e ai é o problema!
Se o bean ta request parece que eu perco a referencia dos “objetos” da tabela"…
Quando coloco como request ele mata a arvore de componentes que estao na tela? é isso? já li bastante sobre os escopos mas não sei se entendi bem essa nova maneira de pensar!