如何获取Oracle Apex日历选中日期且无反斜杠?
解决Oracle Apex日历选中日期传递时带反斜杠的问题
我之前也碰到过一模一样的问题——APEX在自动传递日历选中日期时,会对日期里的特殊字符自动转义,导致出现多余的反斜杠,甚至还会触发乱码。这里给你两个靠谱的解决思路:
方法1:用JavaScript手动处理日期并构造URL
直接通过动态动作的JS代码接管日期的获取和传递,完全避开APEX的自动转义逻辑,这是最彻底的方案:
- 给你的日历组件添加一个动态动作,触发条件选「Date Selected」(日历的日期选中事件)。
- 动作类型选「Execute JavaScript Code」,输入以下代码:
// 获取选中的原始日期值 var rawDate = apex.item("APEX$NEW_START_DATE").getValue(); // 把日期转成你需要的格式(比如DD-MM-YYYY),这里手动控制格式避免转义 var dateObj = new Date(rawDate); var formattedDate = `${String(dateObj.getDate()).padStart(2, '0')}-${String(dateObj.getMonth() + 1).padStart(2, '0')}-${dateObj.getFullYear()}`; // 构造目标URL,用encodeURIComponent确保日期正确传递 var targetUrl = `f?p=&APP_ID.:9:&SESSION.::NO:RP:P9_START:${encodeURIComponent(formattedDate)}`; // 关闭对话框并返回处理后的URL(如果是弹窗场景) apex.navigation.dialog.close(true, targetUrl);
这段代码完全由你控制日期的格式和传递过程,不会让APEX自动添加反斜杠。
方法2:在目标页面兜底清除反斜杠
如果前端处理有顾虑,也可以在接收日期的页面(页面9)做兜底处理:
- 编辑P9_START项,找到「计算」属性。
- 计算类型选「PL/SQL表达式」,输入:
REPLACE(:P9_START, '\', '')
- 设置计算时机为「Before Header」,确保页面加载前就把反斜杠清理掉。
为什么你之前的尝试无效?
你直接引用&APEX$NEW_START_DATE.的写法,会触发APEX的自动转义机制——它会对变量里的特殊字符(比如日期分隔符)添加反斜杠。哪怕你手动加反斜杠,也会和自动转义的内容冲突,最后就出现了乱码的情况。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

