当前位置: 首页 > 知识库问答 >
问题:

带有RemoteCommand的PF对话框框架

华英睿
2023-03-14

我想通过Remote tecommand操作打开一个对话框,并从页面后备bean中的closeDialog(Object data)中获取值。远程命令在页面加载时正确触发bb中的actionListener

<p:remoteCommand autoRun="true" actionListener="#{userManagerBB.showDialog}"/>

使用此show Dialog方法也可以正确显示对话框:

 public void showDialog(ActionEvent e){
    ...
        otherBean.openDialog(selectedUser);
 }

在另一个Bean中:

public void openDialog(SiteUser user) {
   ...
    RequestContext.getCurrentInstance().openDialog("userDialog", options, params);
}

问题是,我不知道如何聆听由以下事件引发的事件:

RequestContext.getCurrentInstance().closeDialog(user);

在PF示例中http://www.primefaces.org/showcase/ui/dialogFrameworkData.jsf命令按钮和p: ajax是这样使用的

<p:commandButton value="Select Car" icon="ui-icon-extlink" actionListener="#{dialogBean.chooseCar}">  
    <p:ajax event="dialogReturn" listener="#{dialogBean.onCarChosen}" update="growl" />  
</p:commandButton>  

但是我不能将p: ajax放在远程命令标记中:

<p:ajax> Unable to attach <p:ajax> to non-ClientBehaviorHolder parent

我还尝试将ajax行为添加到隐藏的命令按钮中,但侦听器从来没有这样调用过。(当然,我可以在支持bean之间进行数据同步,但这会损害可重用对话框的设计)

有什么方法可以解决这个问题吗?

共有1个答案

东门楚
2023-03-14

我通过创建隐藏的命令按钮并从remoteCommand调用javascript解决了这个问题:

<p:remoteCommand autoRun="true" oncomplete="sync.jq.click()"/>

<p:commandButton widgetVar="sync" actionListener="#{userManagerBB.showDialog}" style="display:none" >
    <p:ajax event="dialogReturn" listener="#{userManagerBB.userChanged}" update="form"/>
</p:commandButton>
 类似资料:
  • JSF2.2;PrimeFaces 5.3 我的目标是通过单击X按钮捕获用户关闭对话框,返回到父页面,以便刷新数据并更新表单。 我能够让p:remoteCommand调用DialogBean中的confirmAndCloseDialog()方法,但从未调用ParentBean中的onDialogReturn()方法。为什么不调用onDialogReturn?我能让它工作吗? 顺便说一句,如果用户以

  • 问题内容: 我正在开发一个程序,该程序可以从文本文件加载和保存数据,并且正在询问用户加载和保存JFileChooser的文件名。 这个问题与 保存 对话框有关:。然后,用户可以在没有任何警告的情况下覆盖现有文件,这 将是一个问题 。 关于如何解决此问题的任何建议?我一直在寻找某种方法或选项,但没有发现任何东西。 提前致谢。 问题答案: 感谢您提供答案,但是我发现了另一个解决方法,可以用这种方法覆盖

  • 我正试图从回收器视图图像点击打开一个对话框...该对话框包含一个视图页来创建一个滑动视图库.. 错误>>> E/AndroidRuntime:致命异常:main process:com.example.cosmic.zumi_test,pid:22289 java.lang.nullpointerException:试图在Android.support.v4的Android.support.v4的

  • 对话框的内容不是在页面最初可见,而是在用户操作时显示额外的信息。 Toasts Materialize 提供了非常简单的方法,来弹出一些信息,同时也不会让用户感到突兀。这些 Toasts 显示的位置和大小会随着你的设备的不同而改变。 在 JavaScript 中调用 Materialize.toast() 方法来使用。 // Materialize.toast(message, displayLe

  • 对话框是一个现代GUI应用不可或缺的一部分。对话是两个人之间的交流,对话框就是人与电脑之间的对话。对话框用来输入数据,修改数据,修改应用设置等等。 输入文字 QInputDialog提供了一个简单方便的对话框,可以输入字符串,数字或列表。 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In this

  • 打开或保存文件,弹出警告等对话框 进程: 主进程​ 选择多个文件和目录的对话框: 1 const {dialog} = require('electron') 2 console.log(dialog.showOpenDialog({properties: ['openFile', 'openDirectory', 'multiSelections']})) Copied! 对话框默认是在主线程中