设置会话状态 - APEX 21.1
Setting Session State - APEX 21.1
根据我遇到的文档和示例,似乎 set/pass 页面之间的会话状态的方式是通过 URL。这让我开始思考,直接从不同页面引用页面项目是否可以?或者这样做有什么缺点,APEX 的新手(比如我)最初可能没有意识到。
例如:
- 有一个应用有两个页面
PAGE 1
和 PAGE 2
PAGE 1
设置 P1_SOME_VALUE = 'GREEN'
(P1_SOME_VALUE
现在处于会话状态)
PAGE 2
需要访问 P1_SOME_VALUE
的值
是否有任何理由不在设置 P2_SOME_VALUE = :P1_SOME_VALUE
的 PAGE 2
上设置 BEFORE HEADER
计算? (假设 P1_SOME_VALUE
在 PAGE 2
的会话中始终可用)
如果从 PAGE 1
到 PAGE 2
是使用超链接完成的,那么我知道使用我见过的 REDIRECT URL 属性方法设置会话状态会更容易.我在我的应用程序中遇到过这样一种情况,在一系列动态操作之后动态生成 URL,并且使用 BEFORE HEADER
计算似乎是针对我给定情况的 cleaner/simpler 解决方案。只是想确保我没有忽略任何东西。
您描述的行为,使用从另一个页面引用页面项目的 pl/sql 过程可以正常工作,但有一些事情需要考虑。不确定此列表是否详尽无遗,其他人可能会评论:
- 就我个人而言,我尽量避免在一个页面内引用其他页面上的项目,因为这会使开发变得更加困难 - 在处理第 x 页时,您通常会仅搜索页面内出现的项目。如果在其他页面上出现,应用程序将变得不那么干净。我尝试将此作为最佳实践。应用程序越干净,维护起来就越容易。当你在 2 年后必须在这个应用程序中工作时,你不会记得第 2 页上引用了
P1_SOME_VALUE
。或者使用它的其他开发人员会永远恨你 ;)
- 这可能会使调试变得更加困难。假设页面是通过 url 或分支访问的,其选项“清除页面缓存”设置为“页面 1”,那么
P1_SOME_VALUE
的值将被清除,因为该项目是在页面 1 上定义的. 调试这个问题将是一个挑战。
- 在 url 中传递一个值是非常安全的。如果您使用校验和,用户将无法手动操作页面项目的值。
- 请注意,页面的 DOM 仅包含在该页面上定义的页面项目。这意味着您不能在第 2 页上使用 javascript 引用
P1_SOME_VALUE
或在第 2 页上使用 javascript 设置 P1_SOME_VALUE
的值。这在您的用例中无关紧要.
在另一个页面而不是它们所属的页面中引用页面项目的替代方法是将数据存储在一个集合中——该集合将在会话期间存在。
根据我遇到的文档和示例,似乎 set/pass 页面之间的会话状态的方式是通过 URL。这让我开始思考,直接从不同页面引用页面项目是否可以?或者这样做有什么缺点,APEX 的新手(比如我)最初可能没有意识到。
例如:
- 有一个应用有两个页面
PAGE 1
和PAGE 2
PAGE 1
设置P1_SOME_VALUE = 'GREEN'
(P1_SOME_VALUE
现在处于会话状态)PAGE 2
需要访问P1_SOME_VALUE
的值
是否有任何理由不在设置 P2_SOME_VALUE = :P1_SOME_VALUE
的 PAGE 2
上设置 BEFORE HEADER
计算? (假设 P1_SOME_VALUE
在 PAGE 2
的会话中始终可用)
如果从 PAGE 1
到 PAGE 2
是使用超链接完成的,那么我知道使用我见过的 REDIRECT URL 属性方法设置会话状态会更容易.我在我的应用程序中遇到过这样一种情况,在一系列动态操作之后动态生成 URL,并且使用 BEFORE HEADER
计算似乎是针对我给定情况的 cleaner/simpler 解决方案。只是想确保我没有忽略任何东西。
您描述的行为,使用从另一个页面引用页面项目的 pl/sql 过程可以正常工作,但有一些事情需要考虑。不确定此列表是否详尽无遗,其他人可能会评论:
- 就我个人而言,我尽量避免在一个页面内引用其他页面上的项目,因为这会使开发变得更加困难 - 在处理第 x 页时,您通常会仅搜索页面内出现的项目。如果在其他页面上出现,应用程序将变得不那么干净。我尝试将此作为最佳实践。应用程序越干净,维护起来就越容易。当你在 2 年后必须在这个应用程序中工作时,你不会记得第 2 页上引用了
P1_SOME_VALUE
。或者使用它的其他开发人员会永远恨你 ;) - 这可能会使调试变得更加困难。假设页面是通过 url 或分支访问的,其选项“清除页面缓存”设置为“页面 1”,那么
P1_SOME_VALUE
的值将被清除,因为该项目是在页面 1 上定义的. 调试这个问题将是一个挑战。 - 在 url 中传递一个值是非常安全的。如果您使用校验和,用户将无法手动操作页面项目的值。
- 请注意,页面的 DOM 仅包含在该页面上定义的页面项目。这意味着您不能在第 2 页上使用 javascript 引用
P1_SOME_VALUE
或在第 2 页上使用 javascript 设置P1_SOME_VALUE
的值。这在您的用例中无关紧要.
在另一个页面而不是它们所属的页面中引用页面项目的替代方法是将数据存储在一个集合中——该集合将在会话期间存在。