PrimeFaces 4.0から入った(厳密には3.5.7ですが、有償のelite planのみ)Dialog Framework、仕事では3.5時代にやっていたダイアログ制御を踏襲していて、使っていませんでした。
で、ちょっと触ってみたのですが、Dialog Frameworkというだけあって、色々なページから呼び出されても共通的に使えるダイアログとして良い感じになってるようです。
確認環境
NetBeans 8
JDK 8
GlassFish 4.0.1 b06
PrimeFaces 5.0
普通にdialog.xhtmlのようなダイアログページ(dialog.xhtml)を定義して
<h:body>
<h:outputText value="ダイアログ画面" />
<h:button value="ダイアログボタン" />
</h:body>
呼び出し側のページにボタンを置いて
<p:commandButton value="ダイアログ" actionListener="#{baseBean.viewDialog()}" />
管理対象BeanではRequestContextを使って
@Named
@ViewScoped
public class BaseBean implements Serializable{
public void viewDialog(){
RequestContext.getCurrentInstance().openDialog("dialog");
}
}
のように書きます。
追記:書き忘れていたのですが、以下faces-config.xmlが必要でした。
xml version='1.0' encoding='UTF-8'
<faces-config version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlnsxsi="http://www.w3.org/2001/XMLSchema-instance"
xsischemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
<action-listener>
org.primefaces.application.DialogActionListener
</action-listener>
<navigation-handler>
org.primefaces.application.DialogNavigationHandler
</navigation-handler>
<view-handler>
org.primefaces.application.DialogViewHandler
</view-handler>
</application>
</faces-config>
実行してボタンを押すと


と普通にダイアログとして呼び出されます。
ダイアログをドラッグ不可にしたり、サイズ変更不可にしたりするための設定は呼び出し元から
public void viewDialog(){
Map<String, Object> options = new HashMap<>();
options.put("draggable", false);
options.put("resizable", false);
RequestContext.getCurrentInstance().openDialog("dialog", options, null);
}
とMapを渡せばいいようです。
画像だとわかりにくいですが

ドラッグ移動できません。また、ダイアログの右下を先ほどの図と見比べてもらえばわかるのですが、リサイズできないようになっています。
ふむ。
値を渡したり、戻したりもできるらしいので次にやってみたいと思います。