0

私は現在CRUDフォームに取り組んでおり、最も簡単なはずの最後の部分である削除に取り組んでいます。しかし、ユーザーが実際に削除する前にダイアログを表示したいと思います。そして、これは私がPrimefaces3.4で問題を抱えているところです。何らかの理由で、p:dialog内のボタンでアクションを設定できません。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をビジネスアクションに使用するべきではないことは承知していますが、データテーブルとダイアログを考えると回避策を考えることはできません。p:confirmDialog内のp:commandButtonでajax = falseを作成する方法についてのアイデアはありますか?

4

1 に答える 1

1

<body>レンダリングされると、ダイアログのHTML出力は、クロスブラウザ互換の最高のオーバーレイ/ポジショニングを実現するために、オンロードJavaScriptによってHTMLの最後に再配置されます。ただし、これは、それが内に配置された場合<form>、それは<form>もはや存在せず、同期(非ajax)要求はもはや機能しないことを意味します。これは正確にはactionvsのactionListener問題ではありません。

<p:dialog>(そして実際<p:confirmDialog>に使用しているように見えるように)独自の<h:form>コンポーネントが必要です。

<h:form>
    <p:dataTable>
        ...
    </p:dataTable>
</h:form>
...
<p:confirmDialog>
    <h:form>
        ...
    </h:form>
</p:confirmDialog>
于 2013-01-06T12:31:11.983 に答える