Ajuda c/ Primefaces Datatable Selection Basic

Olá estou com problemas para usar esse recurso do primefaces, já olhei o exemplo do case no site do primefaces.org, mas não entendi direito como a meu bean recebe o parametro da linha do dataTable e como ele deve mostrar isso no dialog, segue abaixo meu codigo e meu bean, se puderem me ajudar desde já agradeço

Essa é a view jsf

``<h:form id=“form”>
<p:growl id=“msgs” showDetail=“true” />
<p:dataTable id=“tbpanel” var=“panel” value="#{ContaBean.lista_contas}" style=“font-size:11px;max-width:1200px” scrollable=“true” scrollHeight=“250”>
<f:facet name=“header” style=“font-size:16px”>
</f:facet>
<p:column headerText=“Numero” >

``

---------> CLASSE BEAN

import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

@ManagedBean(name=“ContaBean”)
@RequestScoped

public class Conta {

private String id;
private String numero;
private String cliente;
private String dt_atendimento;
private String status;
private List lista_contas;
private Conta selectedConta;
private List selectedContas;
private Conta conta;

@PostConstruct
public void init(){
this.setConta(new Conta());

}

public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getCliente() {
return cliente;
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
public String getDt_atendimento() {
return dt_atendimento;
}
public void setDt_atendimento(String dt_atendimento) {
this.dt_atendimento = dt_atendimento;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List getLista_contas() {
lista_contas=new DaoConta().parcial_panel();
return lista_contas;
}
public void setLista_contas(List lista_contas) {
this.lista_contas = lista_contas;
}

public Conta getConta() {
return conta;
}

public void setConta(Conta conta) {
this.conta = conta;
}
public Conta getSelectedConta() {
return selectedConta;
}

public void setSelectedConta(Conta selectedConta) {
this.selectedConta = selectedConta;
}

public List getSelectedContas() {
return selectedContas;
}

public void setSelectedContas(List selectedContas) {
this.selectedContas = selectedContas;
}
public void onRowSelect(SelectEvent event) {
FacesMessage msg = new FacesMessage(“Conta selecionada”, ((Conta) event.getObject()).getId());
FacesContext.getCurrentInstance().addMessage(null, msg);
}

public void onRowUnselect(UnselectEvent event) {
FacesMessage msg = new FacesMessage(“Conta não selecionada”, ((Conta) event.getObject()).getId());
FacesContext.getCurrentInstance().addMessage(null, msg);
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

---------> CLASSE DAO

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DaoConta {

public List<Conta> parcial_panel(){
    
    Conexao con = new Conexao();
    Connection conexao = con.conecta();
    List<Conta> listaContas = new ArrayList<Conta>();
    ResultSet res=null;
    Statement stm = null;
    
    String sql="SELECT CLIENTE.NOME FROM DBAMV.CLIENTE";
    
    try{
        
        stm=conexao.createStatement();
        res=stm.executeQuery(sql);
        
        
        
         while(res.next()){            
        Conta co = new Conta();
        co.setCLIENTE(res.getString("NOME"));
   

        listaContas.add(co);
    
         }
    }catch(SQLException e){
        System.out.println("Ocorreu um erro na conexao com o banco no momento de inserir a lista de contas.");
        
    }finally{
        try{
            stm.close();
            conexao.close();
        }
        catch(Throwable e){
            System.out.println("Ocorreu um erro ao tentar fechar a conexao.");
        }
    }
    
    return listaContas;
    
}

}

`< p:commandButton oncomplete=“PF(‘contaDialog’).show()” icon=“ui-icon-search” title="View"
action = "#{ContaBean.contaSelecionada( )}

//apague essa linha
< f:setPropertyActionListener value="#{panel}" target="#{ContaBean.selectedContas}" />

< /p:commandButton>

no managedbean

private DataModel dataModelContas;

public DataModel getDataModelContas( ){
if( dataModelContas == null ){
dataModelContas = new ListDataModel<>(getLista_contas( ));
}
return dataModelContas;
}

public Conta contaSelecionada( ){
return dataModelContas.getRowData( );
}

`

1 curtida

Primeiro obrigado Luciano,
uma pergunta no metodo getDataModelContas( ) não deveria ser do tipo DataModel para retornar isso ?

Não rolou

#{ContaBean.contaSelecionada()}: java.lang.NullPointerException
javax.faces.FacesException: #{ContaBean.contaSelecionada()}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIData.broadcast(UIData.java:1106)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

vou tentar pegar melhor o erro

`opa é mesmo, obg pela correção;

acredito então que deva ser a questão do escopo

troca de @RequestScoped para @ViewScoped

e faz isso também

< p:commandButton oncomplete=“PF(‘contaDialog’).show()” icon=“ui-icon-search” title="View"
actionListener = "#{ContaBean.contaSelecionada( ) update =@form}
`