如何实现P101_USERNAME值跨页传递及登录页重定向传参?
关于Oracle APEX中传递P101_USERNAME参数的解决方案
问题1:如何将P101_USERNAME的值传递至其他页面?
在Oracle APEX里传递页面参数有几种实用的方式,你可以根据具体场景选择:
- 直接利用会话状态引用:如果P101_USERNAME已经提交到会话中(比如登录操作完成后),其他页面只要创建对应页面项(同名或不同名都可以),直接通过
:P101_USERNAME就能获取它的值。APEX会自动维护会话级变量,只要用户会话未过期,这个值就会一直存在。 - 跳转时在URL中携带参数:通过按钮、链接或页面导航跳转时,你可以用APEX内置函数生成带参数的URL,示例如下:
也可以手动构造URL:APEX_PAGE.GET_URL( p_page => 200, -- 替换为你的目标页面ID p_items => 'P200_USERNAME', -- 目标页面接收参数的项名 p_values => :P101_USERNAME )f?p=&APP_ID.:200:&SESSION.::NO::P200_USERNAME:' || :P101_USERNAME,这样目标页面的P200_USERNAME就能自动获取到值。 - 通过APEX_UTIL设置会话变量:如果需要在后台逻辑里传递参数,可先执行:
之后在目标页面直接引用APEX_UTIL.SET_SESSION_STATE('TARGET_USERNAME', :P101_USERNAME);:TARGET_USERNAME即可拿到参数值。
问题2:登录页重定向至密码更新页时,如何传递P101_USERNAME参数?
针对你这种基于密码过期日期的重定向场景,推荐两种靠谱的方法:
- 在重定向URL中拼接参数:假设密码更新页是页面201,在登录页的重定向进程里,用以下代码生成带参数的跳转URL:
要是用PL/SQL块手动重定向,也可以这么写:apex_util.redirect_url( p_url => apex_page.get_url( p_page => 201, p_items => 'P201_USERNAME', p_values => :P101_USERNAME ) );
用户被重定向后,密码更新页的owa_util.redirect_url('f?p=' || v('APP_ID') || ':201:' || v('SESSION') || '::NO::P201_USERNAME:' || :P101_USERNAME);P201_USERNAME就会自动填充P101_USERNAME的值。 - 先设置会话状态再重定向:在执行重定向操作前,先把参数存入会话:
之后直接重定向到密码更新页即可。只要目标页面的APEX_UTIL.SET_SESSION_STATE('P201_USERNAME', :P101_USERNAME);P201_USERNAME项设置“来源”为“会话状态”,就能自动获取到参数值,还不用在URL里暴露参数,安全性更高。
另外要注意:确保目标页面的页面项有正确的访问权限,不然可能会出现拿不到参数值的情况哦。
内容的提问来源于stack exchange,提问作者Thembani Mbambo
相关产品推荐
相关产品推荐

