jsf 2 -使用p:对话框删除数据表上的实体



我目前正在处理CRUD表单,现在正在处理最后一部分,这应该是最容易的-删除。但我想在用户进行实际删除之前显示一个对话框。这就是我在《Primefaces 3.4》中遇到的问题。由于某些原因,我无法在p:对话框中的按钮中设置动作,ajax=false失败。我是这样做的:

<p:column headerText="#{msgs['action.delete']}"
                    styleClass="a-center">
    <p:commandButton icon="ui-icon-trash"
        oncomplete="confirmation.show()">
        <f:setPropertyActionListener
            target="#{marketingCodeBean.marketingCode}" value="#{code}"></f:setPropertyActionListener>
    </p:commandButton>
</p:column>

所示的对话框:

<p:confirmDialog id="confirmDialog"
                message="#{msgs['message.marketingCode.confirmDelete']}"
                header="#{msgs['common.confirmDelete']}" severity="alert"
                widgetVar="confirmation">
    <p:commandButton id="confirm" value="#{msgs['common.yes']}"
        oncomplete="confirmation.hide()" update=":form:mktgCodeTable"
        actionListener="#{marketingCodeBean.remove}" />
    <p:commandButton id="decline" value="#{msgs['common.no']}"
        onclick="confirmation.hide()" type="button" />
</p:confirmDialog>

我知道actionListener不应该用于业务操作,但是在给定数据表和对话框的情况下,我想不出一个解决方案。任何想法,我如何能使ajax=false在p:commandButton内p:confirmDialog?

一旦呈现,对话框的HTML输出将被一些onload JavaScript重新定位到HTML <body>的结尾,以实现最佳的跨浏览器兼容覆盖/定位。然而,这意味着如果它被放置在<form>中,它将不再在<form>中,并且同步(非ajax)请求将不再工作。这并不完全是action vs actionListener的问题。

<p:dialog>(和<p:confirmDialog>,因为你似乎实际使用)应该有自己的<h:form>组件。

<h:form>
    <p:dataTable>
        ...
    </p:dataTable>
</h:form>
...
<p:confirmDialog>
    <h:form>
        ...
    </h:form>
</p:confirmDialog>

相关内容

  • 没有找到相关文章

最新更新