Boa tarde, galera
Estou usando o primefaces 2.2.1 num projeto aqui, e não estou tendo sucesso em algo básico do primefaces, o selection do p:datatable.
O que deve acontecer é muito simples: selecionar uma linha do datatable e carregar os valores num form ao lado via ajax (não estou usando o p:dialog).
O que acontece: ao clicar na linha o setter é chamado, mas meu rowSelectListener nunca e verifiquei q o objeto está sempre nulo.
Tenho algumas duvidas como isso realmente funciona, não é preciso um converter para funcionar, é realmente necessário o Listener?
Usava o JSF 1.2 e lembro q la tinha um converter para isso, mas com o JSF 2.0 e o primefaces não sei se existe, estou meio perdido.
Espero q tenha sido claro quanto a duvida. Alguém sabe o q fiz ou está errado?
Abaixo meu datatable e manageBean
<p:dataTable paginator="true" rows="10" widgetVar="tabelaClientes"
lazy="true" dynamic="true" selectionMode="single" id="tabela"
value="#{clienteDM}" var="cliente" onRowSelectUpdate="form" rowSelectListener="#{clienteMB.onRowSelect}"
paginatorTemplate=" {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,20" selection="#{clienteMB.cliente}"
loadingMessage="Carregando..." paginatorPosition="bottom" >
<p:column sortBy="#{cliente.id}" filterBy="#{cliente.id}" filterEvent="enter" >
<f:facet name="header">Id</f:facet>
<h:outputText value="#{cliente.id}" />
</p:column>
<p:column filterBy="#{cliente.nome}" sortBy="#{cliente.nome}" >
<f:facet name="header">Nome</f:facet>
<h:outputText value="#{cliente.nome}" />
</p:column>
</p:dataTable>
o form q deverá sofrer o update quando selecionar a linha
<h:panelGrid id="form" style="width:100%" >
<h:panelGroup>
<div class="form-topo">
<div><p:commandLink value="+ Novo cliente" action="#{clienteMB.reset}" update="form" /></div>
<div class="clear"></div>
</div>
<div>
<div>Nome</div>
<h:inputText value="#{clienteMB.cliente.nome}" />
</div>
<div>
<p:commandButton styleClass="bt" value="Salvar" action="#{clienteMB.salvar}" update="tabela" />
</div>
</h:panelGroup>
</h:panelGrid>
ManageBean
@Component("clienteMB")
@SessionScoped
public class ClienteMB {
.
.
.
private ClienteVO cliente;
public void setCliente(ClienteVO cliente) {
this.cliente = cliente;
}
public ClienteVO getCliente() {
if(cliente == null){
cliente = new ClienteVO();
}
return cliente;
}
public void onRowSelect(SelectEvent event){
cliente = (ClienteVO) event.getObject();
}
}