29

こんにちは、私はいくつかの関数を持つマネージド Bean を持っています。その関数のいくつかの条件に基づいて、ダイアログ ボックスを呼び出したいと思います。

マネージドBean関数は次のようになります

public String editStudent(){    
    setReadOnly(false);     
    setButton(true, true, true, false, true, true,true);
    LockItem lItem;
    if(selectStudent !=null){
        lItem = (LockItem) services.getbyId("LockItem", condition);
        if (lItem == null){
            System.out.println("Student Avalibale for process :::"); 
            studentRedirect();
            return "studentEdit.jsf?faces-redirect=true";
        } else {
             //To show dialog from here
             System.out.println("Student Not Avalibale : Locked By " + lItem.getLockedBy());
        }
    } else {
        FacesMessage msg;
        msg = new FacesMessage("Please select the record.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return show("menu");
    }
}

このようなマネージ関数からダイアログ ボックスを呼び出す方法はありますか

4

3 に答える 3

91

RequestContextクラス(またはPrimeFacesバージョン 6.2 以降を使用している場合) を使用することで、これを行うことができます。

次のものがあるとします。

<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>

したがって、facelet 自体で行う方法、つまりonclick=myDialogVar.show();、次のようにマネージド Bean でも同じことができます。

PrimeFace <= 3.x の場合

RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");

PrimeFaces >= 4.x から PrimeFaces < 6.2の場合 (@dognose および @Sujan による)

RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('myDialogVar').show();");

PrimeFaces >= 6.2 の場合

PrimeFaces current = PrimeFaces.current();
current.executeScript("PF('myDialogVar').show();");

これは、対象ダイアログを使用するためのものです。カスタムダイアログを優先せずにメッセージを表示する必要がある場合は、次の方法で実行できます。

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Message Title", "Message body");

// For PrimeFaces < 6.2
RequestContext.getCurrentInstance().showMessageInDialog(message);

// For PrimeFaces >= 6.2
PrimeFaces.dialog().showMessageDynamic(message);

引数を渡してコールバックを設定することもできます。リンクのショーケースの例を参照してください。

以下も参照してください。

于 2013-10-30T09:41:52.197 に答える
8

Primeface 4.0 以降を使用している場合:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
于 2013-10-30T09:52:59.830 に答える
6

Vrushank のソリューションは正しいです。

別の方法もあります。ダイアログで、次のように、rendered 属性を Bean のブール値にバインドし、visible 属性を true に設定します。

<p:confirmDialog
        widgetVar="myDialog"
        visible="true"
        rendered="#{myBean.showMyDialog}">

Bean のアクション リスナーで を呼び出すだけsetShowMyDialog(true)で、ダイアログが表示されます (ダイアログがこのアクションによって更新されていると仮定します)。このアプローチは、何らかの理由でダイアログの HTML がユーザーに表示されていないときにレンダリングしたくない場合に役立ちます。このようにして、ダイアログが表示されているかどうかに関係なく、Bean で情報にアクセスできます。

このソリューションのもう 1 つの利点は、(ダイアログまたはその親の) ajax 更新時にダイアログが非表示にならないことです。

于 2013-10-30T10:33:07.723 に答える