web-dev-qa-db-ja.com

マネージドBean関数からPrimefacesダイアログボックスを呼び出す

こんにちは私はいくつかの機能を持つマネージド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");
    }
}

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

24
NKS

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

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

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

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

PrimeFaces <= 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);
_

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

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

76
Vrushank

Primeface 4.0以上の場合:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
8

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

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

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

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

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

6
hendrix