Boa tarde a todos estou com problema ao selecionar um registro de uma dataTable, debugando o fonte vi que no “selection” o objeto que será alvo desse evento recebe sempre null e não o objeto selecionado segue os fontes:
View
<ui:composition template="WEB-INF/templates/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p=“http://primefaces.org/ui”>
<ui:define name="corpo">
<div class="ui-fluid">
<h:form id="formulario">
<p:growl autoUpdate="true" escape="true" />
<p:toolbar id="barra">
<f:facet name="left">
<p:commandButton title="Incluir novo cliente"
oncomplete="PF('dialogo').show();" process="@this"
update="dialogo" icon="ui-icon-document" style="width: 50px;"
action="#{clienteBean.prepararNovoCliente}">
</p:commandButton>
<p:commandButton icon="ui-icon-pencil" process="@this"
update="dialogo" oncomplete="PF('dialogo').show()"
style="width: 50px;"
>
<p:resetInput target="dialogo"/>
<f:setPropertyActionListener value="#{clienteBean.clienteSelecionado}" target="#{clienteBean.clienteEdicao}"/>
</p:commandButton>
</f:facet>
<f:facet name="right">
<h:form>
<h:panelGrid columns="2">
<p:inputText size="50"/>
<p:commandButton icon="ui-icon-search" style="width: 50px"/>
</h:panelGrid>
</h:form>
</f:facet>
</p:toolbar>
<p:dataTable emptyMessage="Nenhum Cliente Cadastrado" reflow="true"
styleClass="ui-fluid" value="#{clienteBean.clientes}" var="cliente"
selectionMode="single" id="dbgrid" paginator="true"
selection="#{clienteBean.clienteSelecionado}"
rowKey="#{cliente.id}" paginatorPosition="bottom" rows="10"
>
<f:ajax event="rowSelect"/>
<p:column headerText="Nome" styleClass="ui-grid-col-8"
style="width: 80%; text-align: left;">
<p:outputLabel value="#{cliente.nome}" />
</p:column>
<p:column headerText="CPF" styleClass="ui-grid-col-4"
style="width: 20%; text-align: center;">
<p:outputLabel value="#{cliente.cpf}" />
</p:column>
</p:dataTable>
<p:dialog widgetVar="dialogo" id="dialogo" resizable="false"
header="Cadastro de Clientes" responsive="true"
closeOnEscape="true">
<p:messages autoUpdate="true" closable="true" />
<p:panelGrid columns="2" style="margin-top: 10px;" layout="grid"
styleClass="ui-panelgrid-blank"
columnClasses="ui-grid-col-4, ui-grid-col-8 ">
<p:outputLabel value="Nome" for="txtNome" />
<p:inputText id="txtNome"
value="#{clienteBean.clienteEdicao.nome}" />
<p:outputLabel value="Endereco" for="txtEndereco" />
<p:inputText id="txtEndereco"
value="#{clienteBean.clienteEdicao.endereco}" />
<p:outputLabel value="Bairro" for="txtBairro" />
<p:inputText id="txtBairro"
value="#{clienteBean.clienteEdicao.bairro}" />
<p:outputLabel value="Numero" for="txtNumero" />
<p:inputText id="txtNumero"
value="#{clienteBean.clienteEdicao.numero}" />
<p:outputLabel value="Cep" for="txtCep" />
<p:inputMask id="txtCep" mask="99.999-999"
value="#{clienteBean.clienteEdicao.cep}" />
<p:outputLabel value="CPF" for="txtCPF" />
<p:inputMask id="txtCPF" mask="[CPF removido]"
title="Este campo devera ser informado"
value="#{clienteBean.clienteEdicao.cpf}" />
<p:outputLabel value="Data de Nascimento" for="txtDatNasc" />
<p:calendar id="txtDatNasc" pattern="dd/MM/yyyy"
value="#{clienteBean.clienteEdicao.dt_nasc}" />
<p:commandButton value="Salvar" icon="ui-icon-disk"
action="#{clienteBean.salvarCliente}" process="@form"
update="formulario"
oncomplete="if (!args.validationFailed) PF('dialogo').hide()" />
<p:outputLabel />
</p:panelGrid>
</p:dialog>
</h:form>
</div>
</ui:define>
</ui:composition>
meu Bean
package br.com.tiautomacao.bean;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import br.com.tiautomacao.cadastros.Cliente;
import br.com.tiautomacao.dao.ClienteDao;
@ManagedBean(name = “clienteBean”)
@ViewScoped
public class ClienteBean {
private List<Cliente> clientes;
private Cliente clienteEdicao = new Cliente();
private Cliente clienteSelecionado = new Cliente();
public void prepararNovoCliente() {
clienteEdicao = new Cliente();
}
public void setClienteEdicao(Cliente clienteEdicao) {
this.clienteEdicao = clienteEdicao;
}
public Cliente getClienteEdicao() {
return clienteEdicao;
}
public void novoCliente() {
clienteEdicao = new Cliente();
}
@PostConstruct
private void init() {
System.out.println("Init");
buscarTodos();
}
public void salvarCliente() {
ClienteDao c = new ClienteDao();
c.insert(clienteEdicao);
FacesContext contexto = FacesContext.getCurrentInstance();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Dados salvos com sucesso",
"Dados salvos com sucesso");
contexto.addMessage(null, msg);
buscarTodos();
}
public List<Cliente> getClientes() {
return clientes;
}
private void buscarTodos() {
ClienteDao c = new ClienteDao();
clientes = c.getAll();
}
public Cliente getClienteSelecionado() {
return clienteSelecionado;
}
public void setClienteSelecionado(Cliente clienteSelecionado) {
if (clienteSelecionado == null){
System.out.println("Cliente selecionado = null ");
}else{
System.out.println("Setando cliente "+clienteSelecionado.getNome());
}
this.clienteSelecionado = clienteSelecionado;
}
public void onRowSelect(SelectEvent evt){
System.out.println("Cliente Selecionado evento "+evt.getObject().toString());
}
}
Só lembrando que eu não uso Bean CDI.
Agradeço a todos que puderem ajudar.