F:setPropertyActionListener

Olá pessoal,

Alguém sabe me dizer para que serve o f:setPropertyActionListener e se não for pedir muito um exemplo de como utiliza-lo.

Vlw

Bom, em linha gerais serve para você fazer uma associação entre um objeto de sua página com um objeto de seu managed bean. Um exemplo comun é quando vc está exibindo uma datatable e o usuario quer deletar ou alterar um daqules objetos, então ao invés de você enviar o id com:

 <f:param name="id" value="#{pessoa.id}" />

você envia o objeto inteiro assim:

<h:dataTable value="#{pessoaController.listaPessoa}" var="pessoa">
   ...
   <h:column>
      <f:facet name="header"><h:outputText value="editar" /></f:facet>
     <h:commandLink value="Editar Pessoa">
        <f:setPropertyActionListener target="#{pessoaController.pessoaSelecionada}" value="#{pessoa}"/>
     </h:commandLink>
   </h:column>
  ...
</h:dataTable>

Então, quando o link Editar Pessoa for clicado o objeto daquela linha vai está no objeto pessoaSelecionada do managed bean. Então no managed bean deve ter algo como:

public class PessoaController {
  ...
  private Pessoa pessoaSelecionada;
  ...
}

É isso. Espero ter ajudado.

1 curtida

[quote=JavaFXMan]Bom, em linha gerais serve para você fazer uma associação entre um objeto de sua página com um objeto de seu managed bean. Um exemplo comun é quando vc está exibindo uma datatable e o usuario quer deletar ou alterar um daqules objetos, então ao invés de você enviar o id com:

 <f:param name="id" value="#{pessoa.id}" />

você envia o objeto inteiro assim:

<h:dataTable value="#{pessoaController.listaPessoa}" var="pessoa">
   ...
   <h:column>
      <f:facet name="header"><h:outputText value="editar" /></f:facet>
     <h:commandLink value="Editar Pessoa">
        <f:setPropertyActionListener target="#{pessoaController.pessoaSelecionada}" value="#{pessoa}"/>
     </h:commandLink>
   </h:column>
  ...
</h:dataTable>

Então, quando o link Editar Pessoa for clicado o objeto daquela linha vai está no objeto pessoaSelecionada do managed bean. Então no managed bean deve ter algo como:

public class PessoaController {
  ...
  private Pessoa pessoaSelecionada;
  ...
}

É isso. Espero ter ajudado.[/quote]

É importante ressaltar que deve-se criar ao menos o setter desta propriedade privada. Pelo menos o meu não funcionou enquanto eu não fiz isso…

public class PessoaController {
  ...
  private Pessoa pessoaSelecionada;
  ...

  public void setPessoaSelecionada(Pessoa pessoaSelecionada)
  {
    this.pessoaSelecionada = pessoaSelecionada;
  }
}

Você também pode passar o objeto utilizando o f:param!

<f:param name=“id” value="#{pessoa}" />