title: f:setPropertyActionListener always setting null
body: <p>I'm trying to put the currently iterated <code>&lt;p:dataTable var&gt;</code> as a property of a managed bean using <code>&lt;f:setPropertyActionListener&gt;</code>. However, it is always set as <code>null</code>.</p>
  
  <p>The view, <code>dentistas.xhtml</code>:</p>
  
  <pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;  
  &lt;html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:h="http://java.sun.com/jsf/html"  
      xmlns:f="http://java.sun.com/jsf/core"  
      xmlns:ui="http://java.sun.com/jsf/facelets"  
      xmlns:p="http://primefaces.org/ui"&gt;  
  
  &lt;h:head&gt;  
  
  &lt;/h:head&gt;  
  &lt;h:body&gt;  
      &lt;ui:composition template="/templates/template.xhtml"&gt;  
  
          &lt;ui:define name="content"&gt;  
              &lt;h:form id="formDentistas"&gt;  
  
                  &lt;p:growl autoUpdate="true" /&gt;  
  
                  &lt;p:commandButton icon="ui-icon-plus" value="Cadastrar"  
                      id="cadastrar" oncomplete="dialogCadastrar.show()" /&gt;  
  
  
                  &lt;p:dataTable var="dentista" value="#{dentistaMB.dentistas}"  
                      paginator="true" emptyMessage="Não foi encontrado nenhum registro"  
                      rows="10" id="dataTableDentistas"&gt;  
  
                      &lt;f:facet name="header"&gt;Lista de Dentistas&lt;/f:facet&gt;  
                      &lt;p:column headerText="Nome" sortBy="nome" filterBy="nome" id="nome"  
                          width="200px"&gt;  
                      #{dentista.pessoaFisica.nome}  
                  &lt;/p:column&gt;  
  
                      &lt;p:column headerText="Data Nascimento" sortBy="dataNascimento"  
                          filterBy="dataNascimento" id="dataNascimento" width="60px"&gt;  
                      #{dentista.pessoaFisica.dataNascimento}  
                  &lt;/p:column&gt;  
  
                      &lt;p:column headerText="CRO" sortBy="cro" filterBy="cro" id="cro"  
                          width="60px"&gt;  
                      #{dentista.cro}  
                  &lt;/p:column&gt;  
  
                      &lt;p:column headerText="Ações" style="width:50px;"&gt;  
                          &lt;p:commandButton value="Alterar" icon="ui-icon-pencil"&gt;  
                             &lt;f:setPropertyActionListener target="#{dentistaMB.selectedDentista}" value="#{dentista}" /&gt;                                  
                          &lt;/p:commandButton&gt;  
  
                          &lt;p:commandButton value="Remover" icon="ui-icon-trash"  
                              actionListener="#{dentistaMB.deletar}"&gt;  
                              &lt;f:setPropertyActionListener target="#{dentistaMB.selectedDentista}" value="#{dentista}" /&gt;  
                          &lt;/p:commandButton&gt;  
                      &lt;/p:column&gt;  
  
                  &lt;/p:dataTable&gt;  
              &lt;/h:form&gt;  
  
              &lt;ui:include src="/tabelas/dialog_insert_dentista.xhtml" /&gt;  
  
  
          &lt;/ui:define&gt;  
      &lt;/ui:composition&gt;  
  
  
  &lt;/h:body&gt;  
  &lt;/html&gt;  
  </code></pre>
  
  <p>The managed bean, <code>DentistaMBImpl</code>:</p>
  
  <pre><code>package br.com.odontonew.mb;  
  
  import java.util.List;  
  import java.util.Map;  
  
  import javax.annotation.PostConstruct;  
  import javax.faces.bean.ManagedBean;  
  import javax.faces.bean.ManagedProperty;  
  import javax.faces.bean.RequestScoped;  
  import javax.faces.bean.SessionScoped;  
  import javax.faces.bean.ViewScoped;  
  import javax.faces.context.ExternalContext;  
  import javax.faces.context.FacesContext;  
  import javax.faces.convert.FacesConverter;  
  import javax.faces.event.ActionEvent;  
  
  import org.apache.log4j.Logger;  
  import org.primefaces.context.RequestContext;  
  
  import br.com.odontonew.bean.Dentista;  
  import br.com.odontonew.bean.EstadoCivil;  
  import br.com.odontonew.bean.PessoaFisica;  
  import br.com.odontonew.bean.Sexo;  
  import br.com.odontonew.bean.SituacaoPessoa;  
  import br.com.odontonew.bean.Uf;  
  import br.com.odontonew.bo.BasicBO;  
  import br.com.odontonew.exception.BOException;  
  
  @ManagedBean(name = "dentistaMB")  
  @ViewScoped  
  public class DentistaMBImpl extends BasicMBImpl {  
  
      private Logger logger = Logger.getLogger(DentistaMBImpl.class);  
  
      @ManagedProperty("#{dentistaBO}")  
      private BasicBO dentistaBO;  
      private Dentista dentista;  
      private Dentista selectedDentista;  
      private List&lt;Dentista&gt; dentistas;  
  
      // Lists  
      private List&lt;EstadoCivil&gt; estadosCivis;  
      private List&lt;SituacaoPessoa&gt; situacoesPessoa;  
      private List&lt;Sexo&gt; sexos;  
      private List&lt;Uf&gt; ufs;  
  
      @PostConstruct  
      public void init() {  
          dentista = new Dentista();  
          dentista.setPessoaFisica(new PessoaFisica());  
          dentista.getPessoaFisica().setSexo(new Sexo());  
          dentista.getPessoaFisica().setEstadoCivil(new EstadoCivil());  
          dentista.getPessoaFisica().setSituacao(new SituacaoPessoa());  
          dentista.getPessoaFisica().setUf(new Uf());  
          estadosCivis = (List&lt;EstadoCivil&gt;) dentistaBO  
                  .findByNamedQuery(EstadoCivil.FIND_ALL);  
          situacoesPessoa = (List&lt;SituacaoPessoa&gt;) dentistaBO  
                  .findByNamedQuery(SituacaoPessoa.FIND_ALL);  
          sexos = (List&lt;Sexo&gt;) dentistaBO.findByNamedQuery(Sexo.FIND_ALL);  
          ufs = (List&lt;Uf&gt;) dentistaBO.findByNamedQuery(Uf.FIND_ALL);  
      }  
  
      public void salvar(ActionEvent event) {  
          try {  
              dentista = (Dentista) dentistaBO.save(dentista);  
              addInfoMessage("Dentista salvo com sucesso");  
              RequestContext.getCurrentInstance().execute(  
                      "dialogCadastrar.hide()");  
  
          } catch (BOException e) {  
              addErrorMessage(e.getMessage());  
          }  
      }  
  
      public void atualizar(ActionEvent event) {  
          try {  
              dentistaBO.update(selectedDentista);  
              addInfoMessage("Dentista atualizado com sucesso");  
          } catch (BOException e) {  
              addErrorMessage(e.getMessage());  
          }  
      }  
  
      public void deletar(ActionEvent event) {  
          try {             
              dentistaBO.delete(selectedDentista);  
              addInfoMessage("Dentista deletado com sucesso");  
          } catch (BOException e) {  
              addErrorMessage(e.getMessage());  
          }  
      }  
  
      public List&lt;Dentista&gt; getDentistas() {  
          try {  
              if (dentistas == null)  
                  dentistas = (List&lt;Dentista&gt;) dentistaBO  
                          .findByNamedQuery(Dentista.FIND_ALL_COMPLETO);  
  
              return dentistas;  
          } catch (BOException e) {  
              addErrorMessage(e.getMessage());  
              return null;  
          }  
      }  
  
      /* gets and sets */  
  
      public Dentista getSelectedDentista() {  
          return selectedDentista;  
      }  
  
      public void setSelectedDentista(Dentista selectedDentista) {  
          this.selectedDentista = selectedDentista;  
      }  
  
      public Dentista getDentista() {  
          return dentista;  
      }  
  
      public void setDentista(Dentista dentista) {  
          this.dentista = dentista;  
      }  
  
      public Logger getLogger() {  
          return logger;  
      }  
  
      public void setLogger(Logger logger) {  
          this.logger = logger;  
      }  
  
      public List&lt;EstadoCivil&gt; getEstadosCivis() {  
          return estadosCivis;  
      }  
  
      public void setEstadosCivis(List&lt;EstadoCivil&gt; estadosCivis) {  
          this.estadosCivis = estadosCivis;  
      }  
  
      public List&lt;SituacaoPessoa&gt; getSituacoesPessoa() {  
          return situacoesPessoa;  
      }  
  
      public void setSituacoesPessoa(List&lt;SituacaoPessoa&gt; situacoesPessoa) {  
          this.situacoesPessoa = situacoesPessoa;  
      }  
  
      public List&lt;Sexo&gt; getSexos() {  
          return sexos;  
      }  
  
      public void setSexos(List&lt;Sexo&gt; sexos) {  
          this.sexos = sexos;  
      }  
  
      public void setDentistas(List&lt;Dentista&gt; dentistas) {  
          this.dentistas = dentistas;  
      }  
  
      public List&lt;Uf&gt; getUfs() {  
          return ufs;  
      }  
  
      public void setUfs(List&lt;Uf&gt; ufs) {  
          this.ufs = ufs;  
      }  
  
      public BasicBO getDentistaBO() {  
          return dentistaBO;  
      }  
  
      public void setDentistaBO(BasicBO dentistaBO) {  
          this.dentistaBO = dentistaBO;  
      }  
  
  
  
  }
  </code></pre>