与<p:confirm>一起使用时,不会调用<f:setpropertyactionlistener>

时间:2016-06-22 00:08:14

标签: java jsf primefaces

我正在使用PrimeFaces 5.3,当我尝试在p:commandButton中使用 f:setPropertyActionListener p:confirm 时出现问题。

显示对话框,但与p:confirm一起使用时,f:setPropertyActionListener 中定义的setter方法不会被调用。所以我的bean属性名为 produtoSelecionado 未正确设置。

我的XHTML代码:

    <h:form id="produtosForm">
        ...
        <p:dataTable ...>
            ...
                <p:commandButton
                    icon="ui-icon-trash"
                    title="Excluir"
                    process="@this :dialogExclusao"
                    update=":dialogExclusao :produtosForm:produtosTable"
                    oncomplete="PF('dialogExclusao').show()">
                    <f:setPropertyActionListener
                        value="#{produto}"
                        target="#{pesquisaProdutosBean.produtoSelecionado}" />
                    <p:confirm
                        header="Exclusão de produto"
                        message="Tem certeza que deseja excluir o produto #{pesquisaProdutosBean.produtoSelecionado.sku}?"
                        icon="ui-icon-trash" />
                </p:commandButton>
            </p:column>
        </p:dataTable>

    </h:form>

    <component:dialog-exclusao
        id="dialogExclusao"
        updateComponents=":produtosForm:produtosTable"
        yesAction="#{pesquisaProdutosBean.excluir}" />

上面定义的名为 dialog-exlusao 的自定义组件是一个全局通用p:confirmDialog,用于项目中的多个页面:

<composite:interface>
<composite:attribute
    name="yesAction"
    method-signature="void yesAction()" />
<composite:attribute name="updateComponents" />
</composite:interface>

<composite:implementation>
    <p:confirmDialog
        id="dialogConfirmacaoExclusao"
        global="true"
        widgetVar="dialogConfirmacaoExclusao">

    <p:button
        value="Não"
        styleClass="ui-confirmdialog-no"
        onclick="PF('dialogConfirmacaoExclusao').hide(); return false;" />
    <p:commandButton
        value="Sim"
        oncomplete="PF('dialogConfirmacaoExclusao').hide()"
        styleClass="ui-confirmdialog-yes"
        process="@this"
        update="dialogConfirmacaoExclusao #{cc.attrs.updateComponents}"
        action="#{cc.attrs.yesAction}" />
</p:confirmDialog>

在我的bean属性下面有getter和setter:

@Named
@ViewScoped
public class PesquisaProdutosBean implements Serializable {

private static final long serialVersionUID = 1L;

private Produto produtoSelecionado;

...

public Produto getProdutoSelecionado() {
    return produtoSelecionado;
}

public void setProdutoSelecionado(Produto produtoSelecionado) {
    this.produtoSelecionado = produtoSelecionado;
}

}

当我删除p:confirm标签时,f:setPropertyActionListener被正确触发!

是PF虫吗?如何在我的自定义组件中显示对话框并同时设置bean属性,单击commandButton?

TKS!

0 个答案:

没有答案