ここで解決します。( dialog
Bean 内からの表示と非表示。)
私はdialog
正常に動作するボタンと表示/非表示ボタンを持っています。ダイアログboolean
は、バッキング Bean から値を読み取り、visible
その属性を更新します (これにより、表示または非表示になります)。ajaxclose
イベントを発生させるデフォルトの閉じるボタンを使用してダイアログを閉じるまで、すべてが正常に機能します。その瞬間から、表示/非表示ボタンが機能しないか、ダイアログが状態を更新しませんvisible
。永久に閉鎖されたままです。
ajaxイベントが発生した後、ダイアログvisible
属性を除くすべてが正しく更新されることがわかりました。ボタンは正常に動作し、バッキング Bean を正しく更新し (ログ ファイルで確認できます)、ダイアログ パネルも正しく更新されます (showDialog
画面に正しい値が表示されます)。
ダイアログを表示/非表示にする他の方法があることは知っていますが、この場合に何が起こっているのか非常に興味があります-なぜそのように機能するのですか? Bean から可視性の値を読み取ってダイアログを表示する方法はありますか (ダイアログが閉じているときに Bean の値を更新することがより重要です)。
私のXHTML:
<h:form>
<p:commandButton value="show d1" actionListener="#{testBean.enableShowDialog()}" update=":dialogId"/>
<p:commandButton value="hide d1" actionListener="#{testBean.disableShowDialog()}" update=":dialogId"/>
</h:form>
<p:outputPanel id="dialogId">
showDialog value = #{testBean.showDialog}
<p:dialog header="d1" visible="#{testBean.showDialog}">
<p:ajax event="close" listener="#{testBean.disableShowDialog()}" update=":dialogId"/>
test
</p:dialog>
</p:outputPanel>
そしてバッキングビーン:
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
private static final Logger LOGGER = LoggerFactory.getLogger("TB");
private boolean showDialog;
public boolean isShowDialog() {
LOGGER.info("getter isShowDialog={}", showDialog);
return showDialog;
}
public void enableShowDialog() {
showDialog = true;
LOGGER.info("isShowDialog set to true");
}
public void disableShowDialog() {
showDialog = false;
LOGGER.info("isShowDialog set to false");
}
}