Seleção DataTable PrimeFaces

Olá Pessoal, boa tarde!

Tenho uma DataTable e, quando vou selecionar alguma linha da minha tabela
não consigo com que está me retorne o valor selecionado, assim, sempre me retornando null
O que há de errado?

Segue o código:

       <p:dataTable id="tabelaMovimento" var="item" value="#{movimentoControle.listaMovimento}" rows="9" 
                    selectionMode="single" selection="#{movimentoControle.selectedMovimento}"
                    paginator="true"  paginatorPosition="top" emptyMessage="Nenhum registro encontrado"
                    dynamic="true" onRowSelected="dlgTeste2.show()"
        > 
           
           <p:dialog widgetVar="dlgTeste2">
               <h:outputText value="Nome do Clinete: "/>
               <h:outputText value="#{movimentoControle.selectedMovimento.nomeCliente}"/>
           </p:dialog>
             
         <p:column sortBy="#{item.id}" filterBy="#{item.id}">  
            <f:facet name="header">  
                 <h:outputText value="ID" />  
             </f:facet>  
             <h:outputText value="#{item.id}" />  
         </p:column>

          <p:column sortBy="#{item.idCliente}" filterBy="#{item.idCliente}">  
              <f:facet name="header">  
                     <h:outputText value="ID Cliente" />  
              </f:facet>  
              <h:outputText value="#{item.idCliente}" />  
          </p:column>
           <p:column sortBy="#{item.nomeCliente}" filterBy="#{item.nomeCliente}">   
             <f:facet name="header">  
                     Cliente
             </f:facet>  
             <h:outputText value="#{item.nomeCliente}" />  
         </p:column>  
</p:dataTable>

e o bean:

@ManagedBean
@SessionScoped
public class MovimentoControle {

    private DAOMovimento.MovimentoDAO movimentoDao;
    private modeloMovimento.Movimento movimento;
    private Ficha ficha;
    private Pagamento pagamento;
    private DadosBancoMovimento dadosBancoMovimento;
    private List<ModeloTabelaMovimento> listaMovimento;
    private ModeloTabelaMovimento selectedMovimento;
    private List<ModeloTabelaFicha> listaFicha;


    public MovimentoControle() {
        movimentoDao = new DAOMovimento.MovimentoDAO();
        movimento = new modeloMovimento.Movimento();
        ficha = new Ficha();
        pagamento = new Pagamento();
        dadosBancoMovimento = new DadosBancoMovimento();        
    }

    public ModeloTabelaMovimento getSelectedMovimento() {
        return selectedMovimento;
    }

    public void setSelectedMovimento(ModeloTabelaMovimento selectedMovimento) {
        this.selectedMovimento = selectedMovimento;
    }
        

    public DadosBancoMovimento getDadosBancoMovimento() {
        return  dadosBancoMovimento;
    }

    public void setDadosBancoMovimento(DadosBancoMovimento dadosBancoMovimento) {
        this.dadosBancoMovimento =  dadosBancoMovimento;
    }

    public Ficha getFicha() {
        return ficha;
    }

    public void setFicha(Ficha ficha) {
        this.ficha = ficha;
    }

    public Movimento getMovimento() {
        return movimento;
    }

    public void setM(Movimento movimento) {
        this.movimento = movimento;
    }

    public DAOMovimento.MovimentoDAO getmovimentoDao() {
        return movimentoDao;
    }

    public void setmovimentoDao(DAOMovimento.MovimentoDAO movimentoDao) {
        this.movimentoDao = movimentoDao;
    }

    public Pagamento getPagamento() {
        return pagamento;
    }

    public void setP(Pagamento pagamento) {
        this.pagamento = pagamento;
    }

    public List<ModeloTabelaMovimento> getListaMovimento() throws SQLException, ClassNotFoundException {
        if (listaMovimento == null) {
            listaMovimento = movimentoDao.getMovimentosCadastrados();
        }
        return listaMovimento;
    }
    
    public List<ModeloTabelaFicha> getListaFicha() throws SQLException, ClassNotFoundException {
        if (listaFicha == null) {
            listaFicha = movimentoDao.getFichas();
        }
        return listaFicha;
    }
    
    public void exclui() throws SQLException, ClassNotFoundException {
        FacesContext context = FacesContext.getCurrentInstance();

        HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();

        System.out.println("Busca: " + req.getParameter("codigo"));

        movimentoDao.exclui(req.getParameter("codigo"));
    }   
}

Você deve inicializar o objeto que recebe a linha selecionada.

Ok, inicializei o objeto, mas mesmo assim não obtive sucesso

segue o código:

@ManagedBean
@SessionScoped
public class MovimentoControle {

    private DAOMovimento.MovimentoDAO movimentoDao;
    private modeloMovimento.Movimento movimento;
    private Ficha ficha;
    private Pagamento pagamento;
    private DadosBancoMovimento dadosBancoMovimento;
    private List<ModeloTabelaMovimento> listaMovimento;
    private ModeloTabelaMovimento selectedMovimento;
    private List<ModeloTabelaFicha> listaFicha;


    public MovimentoControle() {
        movimentoDao = new DAOMovimento.MovimentoDAO();
        movimento = new modeloMovimento.Movimento();
        ficha = new Ficha();
        pagamento = new Pagamento();
        dadosBancoMovimento = new DadosBancoMovimento();
        selectedMovimento = new ModeloTabelaMovimento();
    }

Tente na sua datatable dar um update em qualquer outro componente do form.

assim?

  <p:dataTable id="tabelaMovimento" var="item" value="#{movimentoControle.listaMovimento}" rows="9" 
                    selectionMode="single" selection="#{movimentoControle.selectedMovimento}"
                    paginator="true"  paginatorPosition="top" emptyMessage="Nenhum registro encontrado"
                    dynamic="true" update="dlgTeste"
        > 

ainda não funcionou corretamente

Isso.
Troque <h:outputText value="#{movimentoControle.selectedMovimento.nomeCliente}"/> por <h:outputText value="#{item.nomeCliente}" /> e diga se resolveu.

ainda não, continua em branco

tente usar o atributo rowSelectionListener da DataTable, exemplo:

       <p:dataTable id="tabelaMovimento" var="item" value="#{movimentoControle.listaMovimento}" rows="9" 
                    selectionMode="single" selection="#{movimentoControle.selectedMovimento}"
                    paginator="true"  paginatorPosition="top" emptyMessage="Nenhum registro encontrado"
                    dynamic="true" onRowSelected="dlgTeste2.show()" rowSelectListener="#{movimentoControle.onRowSelect}"
        > 

Método na ManagedBean:

    public void onRowSelect(SelectEvent event) {
        setSelectedMovimento((ModeloTabelaMovimento) event.getObject()); // Aqui o corre o Cast e atribuição do objeto vinculado ao evento.

    }

Posta aí aonde tu esta lançando os valores da seleção, quero ver algo que estou desconfiado, recentemente tive muitos problemas com o datatable que agora estou sacando bastante querendo ou não o.O

Hoje é sexta!

Dia de…

Ok, consegui capturar os valores da tabela com o rowSelectionListener :smiley:
vlwww! brigaduuuu