2

ユーザーがの値を変更した場合に確認ダイアログを表示したいと思いますselectOneMenuconfirm()これは、ユーザーが決定するまでブロックされるため、ブラウザーのネイティブメソッドで非常にうまく機能します。Primefacesダイアログでこれを行うためのエレガントな(クライアント側の)ソリューションはありますか?これにより、さまざまなブラウザーで外観が一貫しますか?

現在の解決策:

<p:selectOneMenu id="som" value="#{foo.item}">
    <f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
    <p:ajax event="change" onstart="return confirmChange()" />
</p:selectOneMenu>

<script type="text/javascript">
    function confirmChange() {
        return confirm("O'RLY?");
    }
</script>
4

1 に答える 1

3

PrimeFaces<p:confirmDialog>または単にを使用することができます<p:dialog>

<p:selectOneMenu id="som" value="#{foo.item}" onchange="confirm.show()">
    <f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
</p:selectOneMenu>
<p:confirmDialog widgetVar="confirm" message="ORLY?" header="Confirm" severity="alert">
    <p:commandButton value="Yes" action="#{bean.submit}" process="som" oncomplete="confirm.hide()" />  
    <p:commandButton value="No" type="button" onclick="confirm.hide()" />
</p:confirmDialog> 

で確認ジョブを実行し#{bean.submit}ます。必要に応じて、タグファイルまたは複合コンポーネントを使用してこれをすべて抽象化し、再利用しやすくすることができます。

<p:selectOneMenu id="som" value="#{foo.item}" onchange="confirm.show()">
    <f:selectItems value="#{foo.items}" var="i" itemLabel="#{i.name}" itemValue="#{i.value}" />
</p:selectOneMenu>
<my:confirmDialog id="confirm" message="ORLY?" action="#{bean.submit}" process="som" />

ここにはajaxリクエストを「キャンセル」する手段がないことに注意してください。本当に確認されるまで、それを呼び出さないでください。

于 2012-08-21T14:38:09.577 に答える