关于APEX 21.2中Display Only项与Disabled文本字段会话状态存储的疑问
关于Oracle APEX 21.2中Display Only项赋值与会话状态的疑惑解答
嘿,这个问题其实是个很容易混淆的细节点,官方文档的描述并没有错,只是咱们得把「渲染阶段赋值」和「会话状态存储」这两个概念区分开~
核心区别:渲染赋值 ≠ 会话状态存储
你通过After Header Computation给Display Only项设置值,这属于页面渲染阶段的前端赋值——只是让这个项在页面上显示出你指定的值,但这个值并不会被存入APEX的会话状态池里。而文档里说的「Display Only项不会存储会话状态」,核心指的是:
- 页面提交时,Display Only项的值不会被回传给服务器更新会话状态
- 后续的页面处理(比如Process、动态Action里的PL/SQL)无法通过绑定变量(比如
:P1_MY_DISPLAY_ITEM)获取到这个项的值
而Disabled的文本字段则不同:
- 它在渲染阶段显示的值会被保留在会话状态中
- 页面提交后,依然能通过绑定变量获取到它的值,因为它属于页面源的一部分,会参与会话状态的维护
验证这个差异的小测试
你可以快速验证一下:
- 给Display Only项设置After Header Computation赋值,再添加一个提交按钮
- 新建一个Process,在提交后执行
DBMS_OUTPUT.PUT_LINE(:P1_DISPLAY_ONLY_ITEM); - 运行页面,提交后查看Process的输出,你会发现值是空的
- 把这个项改成Disabled的文本字段,重复操作,就能正常输出赋值的内容
总结
你的操作并没有违背文档描述,只是文档的重点在「会话状态的持久化存储」,而你做的是「渲染阶段的临时显示赋值」——这两者是完全不同的概念哦。
内容的提问来源于stack exchange,提问作者Eslam
相关产品推荐
相关产品推荐

