我正在使用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!