リスナーを介してバッキング Bean でダイアログのステータスを追跡する
ダイアログのオープンステータスを Bean のブール変数として保持できます。
このために、Bean の booleanプロパティを trueに設定するactionListerer
属性をアタッチできます。そのプロパティを false に戻し、基本的にクローズを処理するには、適切に定義されたリスナーを使用してネストできます。<p:menuItem>
openStatus
<p:ajax event="close" listener="#{dialogBean.dialogClosed}">
<p:dialog>
豆:
@ManagedBean
@ViewScoped
public class DialogBean implements Serializable {
private boolean openStatus = false;//getter + setter
public void dialogOpened(ActionEvent event) {
openStatus = true;
}
public void dialogClosed(CloseEvent event) {
openStatus = false;
}
}
景色:
<h:form>
<p:menu>
<p:menuitem value="Open dialog" oncomplete="dialog.show();" update="dialogopen"/>
</p:menu>
<p:dialog widgetVar="dialog">
<h:outputText value="This is your dialog"/>
<p:ajax event="close" listener="#{dialogBean.dialogClosed}" update="dialogopen"/>
</p:dialog>
<h:outputText id="dialogopen" value="Is dialog open? #{dialogBean.openStatus}"/>
</h:form>
Bean プロパティの更新<p:remoteCommand>
dialogWidgetVar.show()
およびdialogWidgetVar.hide()
が完全にクライアント側のイベントである限り、コンポーネントの状態にはダイアログの「オープン状態」は含まれません。Primefaces ドキュメントから取得できるように、ページの読み込み時にダイアログを開くように指示するa の属性をdialog.isVisible()
取得します。メソッドに関しては、コンポーネントがビューに存在するかどうかを確認するだけであり、それはあなたが求めているダイアログの状態への参照もありません。visible
<p:dialog>
dialog.isInView()
org.primefaces.component.dialog.Dialog
また、タイプのバッキング コンポーネント変数にダイアログをバインドすると、悪名高い問題が発生することにも注意してください。
それにもかかわらず、余分なリスナーを に接続したくない場合は、更新を行うmenuitem
を使用するのが最善の策です。<p:remoteCommand>
変数が false に戻されるように、近いリスナーが存在する必要があることに注意してください。
変更された Bean:
@ManagedBean
@ViewScoped
public class DialogBean implements Serializable {
private boolean openStatus = false;//getter + setter
public void dialogClosed(CloseEvent event) {
openStatus = false;
}
}
変更されたビュー:
<h:form>
<p:menu>
<p:menuitem value="Open dialog" oncomplete="dialog.show(); updateOpenStatus();"/>
</p:menu>
<p:dialog widgetVar="dialog">
<h:outputText value="This is your dialog"/>
<p:ajax event="close" listener="#{dialogBean.dialogClosed}" update="dialogopen"/>
</p:dialog>
<p:remoteCommand name="updateOpenStatus" update="dialogopen">
<f:setPropertyActionListener value="#{true}" target="#{dialogBean.openStatus}"/>
</p:remoteCommand>
<h:outputText id="dialogopen" value="Is dialog open? #{dialogBean.openStatus}"/>
</h:form>