2
respostas

<f:setPropertyActionListener > não passa Objeto

Bom dia, Estou com problema ao utilizar <f:setPropertyActionListener>, estou utilizando ele para deletar um pessoa. Mas ele não esta passando objeto para o método.Segui meu código:

<h:dataTable id="tablepessoa" value="#{PessoaFisicaBean.listPessoaFisica}"
    var="pessoa" styleClass="table table-condensed table-hover">
...
    <h:column>
        <f:facet name="header">
            <h:outputText value="Ações" />
        </f:facet>
        <div class="btn-group">
            <h:commandLink id="btn-delete"
                action="#{PessoaFisicaBean.teste}"
                styleClass="btn btn-danger btn-sm">
                <f:setPropertyActionListener value="#{pessoa}" 
                    target="#{PessoaFisicaBean.pessoaFisicaSelecionado}"/>
                <span class="glyphicon glyphicon-trash" />
            </h:commandLink>
        </div>
    </h:column>    
@ViewScoped
@ManagedBean(name = "PessoaFisicaBean")
public class PessoaFisicaBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private PessoaFisica pessoaFisica = new PessoaFisica();
    private List<PessoaFisica> listPessoaFisica;
    private PessoaFisica pessoaFisicaSelecionado;

    public PessoaFisica getPessoaFisica() {
        return pessoaFisica;
    }

    public void setPessoaFisica(PessoaFisica pessoaFisica) {
        this.pessoaFisica = pessoaFisica;
    }

    public PessoaFisica getPessoaFisicaSelecionado() {
        return pessoaFisicaSelecionado;
    }

    public void setPessoaFisicaSelecionado(PessoaFisica pessoaFisicaSelecionado) {
        this.pessoaFisicaSelecionado = pessoaFisicaSelecionado;
    }
    public List<PessoaFisica> getListPessoaFisica() {
        return listPessoaFisica;
    }

    public Sexo[] getListSexo() {
        return Sexo.values();
    }

    public void actionListenerGetDataRegister(ActionEvent actionEvent) {
        this.pessoaFisica.setCadastro(GetDateRegister.getDateRegister());
    }

    public void insert() {
        EntityManager entityManager = (EntityManager) ToolsFaces.getRequestAttribute("session");
        try {
            new PessoaFisicaService(new PessoaFisicaRepository(entityManager)).insertService(pessoaFisica);
            this.pessoaFisica = new PessoaFisica();
            ToolsFaces.addMessage_Info("Cadastro Efetuado Com Sucesso!");
        } catch (Exception e) {
            ToolsFaces.addMessage_Error(e.getMessage());
        }
    }

    public void select() {
        EntityManager entityManager = (EntityManager) ToolsFaces.getRequestAttribute("session");
        this.listPessoaFisica = new PessoaFisicaRepository(entityManager).selectRepository();
    }

    //Deletar pesssoa
    public void delete() {
        EntityManager entityManager = (EntityManager) ToolsFaces.getRequestAttribute("session");
        try {
            System.out.println("delete 1");
            new PessoaFisicaService(new PessoaFisicaRepository(entityManager)).deleteService(pessoaFisicaSelecionado);
            System.out.println("delete 2");
            ToolsFaces.addMessage_Info("Exclusão Efetuada Com Sucesso!");
        } catch (Exception e) {
            ToolsFaces.addMessage_Error(e.getMessage());
        }
    }

    public void teste() {
        System.out.println("Pessoa Selecionada "+pessoaFisicaSelecionado.getNome());
    }
}
2 respostas

Olá Gileade!

Não manjo muito de JSF mas dei uma pesquisada e todos os códigos que dei uma olhada usavam o nome da classe com a primeira letra em minúsculo. Será que o problema seria esse?

Veja, tenta alterar esses trechos de código:

value="#{PessoaFisicaBean.listPessoaFisica}"
action="#{PessoaFisicaBean.teste}"
target="#{PessoaFisicaBean.pessoaFisicaSelecionado}"

Para isso:

value="#{pessoaFisicaBean.listPessoaFisica}"
action="#{pessoaFisicaBean.teste}"
target="#{pessoaFisicaBean.pessoaFisicaSelecionado}"

Veja se funciona, caso não me avisa que tento achar outra solução!

Olá Gileade!

Conseguiu resolver o problema?