Oracle APEX全局实现对话框关闭后刷新父页面的方法求助
解决Oracle APEX对话框关闭后全局刷新父页面的问题
方法一:对话框传参+全局动态操作实现
修改对话框页面的提交按钮
- 打开对话框页面,找到提交设置的按钮(如
SUBMIT) - 将按钮的"行为"改为定义动态操作
- 先添加"提交页面"动作确保设置被保存,再添加"执行JavaScript代码"动作,输入:
// 关闭对话框并传递刷新指令 apex.navigation.dialog.close(true, {action: 'refreshParent'});
- 打开对话框页面,找到提交设置的按钮(如
在全局页面(Page 0)创建动态操作
- 事件选择:
Dialog Closed - 选择类型:JavaScript表达式,表达式填
document.body(确保监听所有页面的对话框关闭事件) - 添加条件:JavaScript表达式,输入:
this.data && this.data.action === 'refreshParent' - 添加动作:刷新页面,选择"整个页面"作为刷新目标
- 事件选择:
方法二:封装全局对话框调用函数
如果你的对话框是通过JS调用打开的,可以封装统一的调用函数,避免重复代码:
// 在全局页面的JavaScript函数库中定义 function openSettingsDialog() { apex.navigation.dialog.open({ url: 'f?p=&APP_ID.:SETTINGS_DIALOG_PAGE:&SESSION.', title: '设置', dialogAttributes: {width: '500px', height: '400px'}, success: function(pData) { if (pData === 'needRefresh') { apex.event.trigger(document, 'apexrefresh'); } } }); }
然后在对话框页面的提交按钮JS中添加:
apex.navigation.dialog.close(true, 'needRefresh');
最后在全局页面创建动态操作,监听apexrefresh事件并执行页面刷新。
为什么之前的全局动态操作没生效?
- 选择类型错误:如果仅选择了特定区域/元素,父页面无对应元素时事件不会触发,必须选择全局范围的元素(如
document.body) - 未过滤对话框来源:所有对话框关闭都会触发刷新,需要通过返回参数区分只有设置对话框关闭时才执行刷新
内容的提问来源于stack exchange,提问作者Jason Bourne
相关产品推荐
相关产品推荐

