Oracle APEX 21应用动态动作返回的GLOBAL_MSG显示旧值如何解决
问题根因
- APEX的
&应用项名.替换语法属于服务端渲染期静态替换,只会在模态页11初次加载时,把当时GLOBAL_MSG的存储值硬编码到前端代码中。后续你通过服务端代码更新GLOBAL_MSG的值后,前端已渲染的静态替换内容不会自动同步更新,因此Alert拿到的永远是页面加载时的旧值,也就是上一次操作后留存的值。 - 你配置的「服务端代码执行」步骤返回项已经生效,最新的GLOBAL_MSG值已经同步到APEX前端的会话状态缓存中,只是直接用替换语法无法读取到实时缓存值。
修复步骤
- 原有第一步「执行服务端代码」配置保持不变,确认GLOBAL_MSG已被正确添加为该步骤的返回项
- 删除原有第二步的Alert动作,替换为执行JavaScript代码动作,代码内容为:
alert(apex.item('GLOBAL_MSG').getValue());
该方法会直接从前端会话缓存中读取服务端刚返回的最新值,不会使用渲染期的静态替换结果
3. 原有第三步「关闭对话框」动作保持不变即可
可选优化(如果需要父页面展示消息)
如果不需要在模态页弹出Alert,希望关闭模态页后在父页面显示创建结果,可以按如下配置:
- 移除模态页的Alert和关闭对话框动作
- 在「执行服务端代码」步骤后新增关闭对话框动作,在关闭动作的「要返回的项」配置中添加GLOBAL_MSG
- 在父页面对应「打开模态框」的按钮上,新增对话框关闭事件的动态动作,触发时用
apex.item('GLOBAL_MSG').getValue()读取返回值展示即可
内容的提问来源于stack exchange,提问作者LG-C
相关产品推荐
相关产品推荐

