0

私のページには、いくつかのアクションonChangeを実行するように設定されたselectOneMenuがあります。アクションが実行される前に confirmDialog を表示したい。

以下は私の実装ですが、うまくいかないようです。確認ダイアログは、ユーザーがオプションを選択する時間を与えずに自動的に非表示になり、クエストには以前の選択の値が含まれます。

<p:selectOneMenu id="selectMenu" value="#{component.selectedAction}"onchange="confirmDialogWidgetVar.show()" >
    <f:selectItem itemLabel="Option A" itemValue="A"/>
    <f:selectItem itemLabel="Option B" itemValue="B"/>
    <f:selectItem itemLabel="Option C" itemValue="C"/>
    <f:selectItem itemLabel="Option D" itemValue="D"/>
    <p:ajax update="confirmDialog" process="@this" global="false"/>
</p:selectOneMenu>

<p:confirmDialog id="confirmDialog" widgetVar="confirmDialogWidgetVar" message="Are you sure you want to select #{component.selectedAction}?">
    <p:commandButton value="YES" oncomplete="confirmDialogWidgetVar.hide()"/>
    <p:commandButton value="NO" onclick="confirmDialogWidgetVar.hide()"/>
</p:confirmDialog>

表示したいメッセージは、「オプション A を選択してよろしいですか?」です。オプション A が選択されている場合の確認ダイアログで。

4

3 に答える 3

0

この方法で機能を実現できます。バッキング Bean で作成private boolean check;し、値を確認して、以下に示すように希望どおりに進めます。

<h:form id="form">

        <p:selectOneMenu  value="#{buttonBean.emp.number}">  
            <f:selectItem itemLabel="Select One" itemValue="" />  
            <f:selectItem itemLabel="Option 1" itemValue="1" />  
            <f:selectItem itemLabel="Option 2" itemValue="2" />  
            <f:selectItem itemLabel="Option 3" itemValue="3" />  
        <p:ajax listener="#{buttonBean.change}" />
        </p:selectOneMenu>      




 <p:confirmDialog id="confirmDialog" message="Are you sure about destroying the world?"  
                header="Initiating destroy process" severity="alert" widgetVar="confirmation">  

        <p:commandButton id="confirm" value="Yes Sure" actionListener="#{buttonBean.dialogCheck}" oncomplete="confirmation.hide()" update="@form" 
                     />  
        <p:commandButton id="decline" value="Not Yet" onclick="confirmation.hide()" type="button" />   

    </p:confirmDialog>

        </h:form>

//バッキングビーン

    @ManagedBean
    @ViewScoped
    public class ButtonBean implements Serializable{



        private Employee emp;;
        private boolean check;;

        public void change(){

            System.out.println("open dilaog box on value change------");


            RequestContext.getCurrentInstance().execute("confirmation.show()");



        }


        public void dialogCheck(){

            check=true;

           if(emp.getNumber().equals("1") && check==true){

            System.out.println("do your change--here-");

        }

        }


        public Employee getEmp() {

            if(emp==null){

                emp=new Employee();
            }

            return emp;
        }


        public void setEmp(Employee emp) {
            this.emp = emp;
        }


        public boolean isCheck() {
            return check;
        }


        public void setCheck(boolean check) {
            this.check = check;
        }





    }
于 2013-05-29T11:48:35.830 に答える
0

を使用すると、これを行うのが難しい場合がありますp:dialog。問題は次のとおりです。

1) ダイアログ メッセージは、selectMenu 値が変更された後に更新されるマネージド Bean を使用します -> 古い値が表示されるのはそのためです。

2) ダイアログを表示しても変更 ajax イベントがブロックされないため、ダイアログ コマンドに関係なく selectMenu が更新されます。

これを行う 1 つの方法は、jQueryを使用することです。

これを primefaces と jsf コンポーネントのみを使用して実行したい場合は、サーバーへの往復が必要になるのではないかと心配しています。アイデアは次のとおりです。 selectMenu を次のようなプロキシ フィールドにバインドし、基本的にこれをcomponent.selectedActionProxy行うアクションを に追加します。<p:command value="YES"component.selectedAction = component.selectedActionProxy

于 2013-05-29T10:19:14.823 に答える
0

これを試してみてください。今はうまくいきます

    public void check(){
    System.out.println(""+getSelectedAction());
    RequestContext.getCurrentInstance().execute("confirmDialogWidgetVar.show()");
    }

    <p:selectOneMenu id="selectMenu" value="#{home.selectedAction}">

    <f:selectItem itemLabel="Option A" itemValue="A"/>
    <f:selectItem itemLabel="Option B" itemValue="B"/>
    <f:selectItem itemLabel="Option C" itemValue="C"/>
    <f:selectItem itemLabel="Option D" itemValue="D"/>
    <p:ajax listener="#{home.check}" />
    <f:ajax render="confirmDialog" ></f:ajax>
    </p:selectOneMenu>


    <p:confirmDialog id="confirmDialog" widgetVar="confirmDialogWidgetVar"   message="Are you sure you want to select#{home.selectedAction}?">`
    <p:commandButton value="YES" oncomplete="confirmDialogWidgetVar.hide()"/>
    <p:commandButton value="NO" onclick="confirmDialogWidgetVar.hide()"/>
</p:confirmDialog>
于 2013-05-29T13:33:07.400 に答える