プロジェクトのどこからでもアクセスできるダイアログ ボックスを実装しようとしていますが、この解決策が可能かどうか疑問に思っていました。
ダイアログは私のプロジェクトのテンプレートに含まれています。たとえば、ログインページにいる場合、「ログイン」ボタンをクリックして認証が成功したときにダイアログを表示したいと思います。そこで、ダイアログにリンクされた Bean を次のようにキャッチします。
getFacesContext().getELContext().getELResolver().getValue(getFacesContext().getELContext(), null, beanName);
「show」引数を設定しました。(以下をご覧ください)
初めて、それは働いています。ログインページにアクセスすると、ダイアログが表示されず、ログインボタンをクリックすると、属性 show が設定され、ページが更新され、ダイアログが表示されます。しかし、それを閉じると、ボタンをもう一度クリックしても再起動できませんでした。(ダイアログは表示されますが表示されません)
私のダイアログは次のようなものです (表示されるたびに表示したいので、visible="true" があります):
<h:form>
<p:dialog header="Dialog" widgetVar="myDialog" rendered="#{bean.show}" visible="true">
<p:ajax event="close" listener="#{bean.onClose}" />
...
</p:dialog>
</h:form>
Bean はビュースコープにあります。
@ManagedBean(name = "bean")
@ViewScoped
public class MyBean {
private boolean show; // + Getters and Setters
@PostConstruct
public void init() {
this.show = false;
...
}
public void onClose() {
this.show = false;
}
}
そして、show 引数を設定している LoginBean も viewScope にあることを追加できます。
ありがとう