Olá, vou descrever minha dúvida e logo após colocar o código(após ver o código e ler minha dúvida pela segunda vez, acho que ficará mais claro):
Estou tentando usar o DataTable - Selection do primefaces(usando como exemplo o próprio show case do framework, porém quando eu clico na "lupa" para exibir o model, ao invés de chamar só o target do botão usuarioBean.selectedUsuario
f:setPropertyActionListener value="#{usuario}"
target="#{usuarioBean.selectedUsuario}" />
Ele chama meu método inicial da montagem do datatable "getUsuarios", diversas vezes:
<p:dataTable value="#{usuarioBean.usuarios}" var="usuario">
Por fim quando vai abrir o modal, ele chama o método getSelectUsario uma vez retornando null.
Quando vai carregar a pagina a primeira vez, esse método getSelectUsario e o setSelectUsuario são chamados algumas vezes também, dessa vez retornando os valores das linhas do meu datatable... Ou seja, acredito que meu código esteja muito desorganizado quando a montagem dessa árvore de componentes.
Seguem os códigos de minha página e do ManagedBean:
<?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://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="../templates/_template.xhtml">
<ui:define name="conteudo">
<h:form id="opcoesUsuario">
<p:fieldset legend="Escolha sua opção">
<h:panelGrid columns="2">
<p:commandButton value="Incluir Usuário" id="incluirUsuario"
action="#{usuarioBean.telaIncluir}" icon="fa fa-plus-circle" />
<p:commandButton value="Pesquiar Usuário" id="pesquisarUsuario"
action="#{usuarioBean.pesquisarUsuario}" icon="fa fa-search-plus" />
</h:panelGrid>
</p:fieldset>
</h:form>
<br />
<br />
<h:form id="form">
<h:messages />
<p:dataTable value="#{usuarioBean.usuarios}" var="usuario">
<p:column headerText="Nome">
<h:outputText value="#{usuario.pessoaFisica.noPessoa}" />
</p:column>
<p:column headerText="Matricula">
<h:outputText value="#{usuario.pessoaFisica.nrMatricula}" />
</p:column>
<p:column headerText="Email">
<h:outputText value="#{usuario.pessoaFisica.dsEmail}" />
</p:column>
<p:column headerText="Cargo">
<h:outputText value="#{usuario.noCargo}" />
</p:column>
<p:column style="width:32px;text-align: center">
<p:commandButton update=":form:detalheUsuario"
oncomplete="PF('usuarioDialog').show()" icon="ui-icon-search"
title="View">
<f:setPropertyActionListener value="#{usuario}"
target="#{usuarioBean.selectedUsuario}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:dialog header="Usuário" widgetVar="usuarioDialog" modal="true"
showEffect="fade" hideEffect="fade" resizable="false">
<p:outputPanel id="detalheUsuario" style="text-align:center;">
<p:panelGrid columns="2"
rendered="#{not empty usuarioBean.selectedUsuario}"
columnClasses="label,value">
<h:outputText value="Nome:" />
<h:outputText value="#{usuario.pessoaFisica.noPessoa}" />
<h:outputText value="Matricula" />
<h:outputText value="#{usuario.pessoaFisica.nrMatricula}" />
<h:outputText value="Email:" />
<h:outputText value="#{usuario.pessoaFisica.dsEmail}" />
<h:outputText value="Cargo" />
<h:outputText value="$#{usuario.noCargo}" />
</p:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
</html>
UsuarioBean:
@Controller
@Scope("request")
public class UsuarioBean {
@Autowired
private UsuarioService usuarioService;
@Autowired
private OrgaoService orgaoService;
private Usuario usuario = new Usuario();
private Usuario selectedUsuario;
public Usuario getSelectedUsuario() {
return selectedUsuario;
}
public void setSelectedUsuario(Usuario selectedUsuario) {
this.selectedUsuario = selectedUsuario;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public void gravar(){
System.out.println("Entrou no método Gravar");
}
public String pesquisarUsuario(){
return "pesquisa";
}
public String telaIncluir(){
return "incluir";
}
public String telaInicial(){
return "index";
}
public List<Orgao> getOrgaos(){
return orgaoService.getAll();
}
public List<Usuario> getUsuarios(){
return usuarioService.getAll();
}
public String salvar(){
usuario.setDsSenha("blbalaslasf");
usuarioService.incluirUsuario(usuario);
return "Index";
}
}