Oracle APEX 21:如何区分页面提交与直接链接访问?
解决Oracle APEX 21区分直接链接访问与Submit提交的问题
针对你需要在直接通过f?p=...链接访问页面时清除会话状态,而点击Submit按钮提交时保留会话状态的需求,推荐以下两种可靠方案:
方案一:通过HTTP请求方法区分
直接链接访问页面属于GET请求,而Submit按钮提交表单属于POST请求,可利用这一差异做判断:
- 在目标页面的Before Header区域添加一个PL/SQL流程
- 设置流程条件为HTTP Request Method is GET
- 在PL/SQL代码框中编写清除会话状态的逻辑,示例:
-- 清除当前页面所有项的会话状态 APEX_UTIL.CLEAR_PAGE_CACHE(:APP_PAGE_ID); -- 若只需清除特定项,可单独设置: -- APEX_UTIL.SET_SESSION_STATE('P1_YOUR_ITEM_NAME', NULL);
方案二:给Submit按钮设置自定义Request值
默认Submit按钮未配置Request属性导致:REQUEST为空,手动配置后可精准区分:
- 编辑页面上的Submit按钮,在Request属性栏中输入自定义值(例如
SUBMIT_FORM) - 在目标页面的Before Header区域添加两个分支流程:
- 分支1:条件设置为
:REQUEST IS NULL,执行清除会话状态的PL/SQL代码(同方案一) - 分支2:条件设置为
:REQUEST = 'SUBMIT_FORM',无需执行任何清除操作,直接保留会话状态
- 分支1:条件设置为
注意:之前尝试的“Redirect Page to this Application”方案不可行,因为重定向会将POST请求转为GET,导致表单新值丢失。
内容的提问来源于stack exchange,提问作者Fat P
相关产品推荐
相关产品推荐

