gpt4 book ai didi

parameter-passing - 甲骨文顶点 : Accessing params passed through URL

转载 作者:行者123 更新时间:2023-12-02 16:51:43 25 4
gpt4 key购买 nike

我通过 URL 传递参数并且页面被正确重定向。如何访问下一个(重定向的)页面上(从上一页)传递并在 URL 中可用的参数?谁能告诉我该怎么做?

或者有没有其他的方式在页面之间传递参数?

是否有类似 Angular 广播事件的选项可用?

我不想使用全局页面选项。

最佳答案

Is there any option available similar to broadcast event from Angular?

不是真的。虽然您可以使用 APEX 做到这一点,但它可能有点矫枉过正。 Angular 是一个执行客户端渲染的 SPA 框架,而 APEX 主要执行服务器端渲染。如果您来自 Angular 世界,您将不得不重新考虑一些事情。

How do I access the parameters on the next (redirected) page that were passed (from previous page) and available in the URL?

第一个问题是:您是否尝试使用 JavaScript 或 SQL & PL/SQL 访问这些值?我会回答这两个问题,但首先我会退后一步解释 session state在顶点。以下内容过于简单,但应该有助于您了解幕后发生的事情。

请记住,APEX 引擎是 Oracle 数据库中的一个模式,其中包含许多表(主要用于存储应用程序元数据)、包(用于业务逻辑和 HTML 生成)和其他数据库对象。在这些表中有一些用于存储“ session 状态”。将两个主表视为 SESSIONS 和 SESSION_DATA。 SESSIONS 将具有 session 的唯一标识符、用户名等。SESSION_DATA 将具有一个指向 SESSIONS 表的 SESSION 列、一个 ITEM_NAME 列和一个 ITEM_VALUE 列。

假设您转到以下 URL: https://yourdomain.com/apex/f?p=101:1:12690960447054

APEX 引擎将获取 URL 的“p”参数并将其解析为 up to 9 values :

  1. 应用
  2. 页面
  3. session
  4. 要求
  5. 调试
  6. 清除缓存
  7. 项目名称
  8. 项目值(value)
  9. 打印友好

在上面的 URL 中,只指定了其中三个值,因此 APEX 引擎为 session 12690960447054 的应用程序 101 中的页面 1 生成 HTML。

但是如果您使用以下 URL 会怎样: https://yourdomain.com/apex/f?p=101:1:12690960447054::::P1_ITEM_NAME:Dan

在这种情况下,APEX 引擎将在生成 HTML 之前更新 SESSION_DATA 表中的 session 状态。它会将 ITEM_VALUE 列设置为“Dan”,其中 SESSION 为 12690960447054,ITEM_NAME 为“P1_ITEM_NAME”。

这就是当您通过 URL 设置 session 状态时技术上发生的事情。当您准备好了解有关 session 状态的更多信息时,请查看 this old but still relevant post来自安东尼尔森。现在让我们继续讨论有关访问 session 状态的问题...

SQL 和 PL/SQL

一旦 APEX 设置了 session 状态,它就会继续生成 HTML。假设您在页面上有一个报告区域,其中包含以下查询:

select col1, col2, col3
from some_table
where col4 = :P1_ITEM_NAME

APEX 引擎将识别查询中的绑定(bind)变量,并根据 session 从 SESSION_DATA 表中提供正确的值。坦率地说,您可以从任何页面访问项目的值,也可以访问应用程序项目,因为此时我们在服务器端,这真的没有什么区别。话虽如此,最佳做法是仅引用当前页面中的页面项目。

有关访问 session 状态服务器端的更多方法,请参阅“引用项目值”: https://docs.oracle.com/en/database/oracle/application-express/19.1/htmdb/understanding-page-level-items.html#GUID-207E66F9-C8A6-4FD1-B2F4-12D4BB302D31

JavaScript

生成 HTML 后,会将其发送到浏览器以进行呈现。为了让 JavaScript 在不使用 Ajax 的情况下访问 session 状态中的值(您应该尽量避免使用 Ajax),这些值必须已经到达 DOM。如果在页面上呈现 P1_ITEM_NAME,则其值应为“Dan”。您可以使用原始 JavaScript 获取此值:

document.getElementById('P1_ITEM_NAME').value

或 jQuery:

$('#P1_ITEM_NAME').val()

不过,最好使用APEX specific JavaScript APIs了解 APEX 如何处理复选框和单选按钮组等内容。例如,您可以使用:

$v('P1_ITEM_NAME')

或者你可以使用:

apex.item('P1_ITEM_NAME').getValue()

请记住,如果该项目没有进入 DOM,比如因为它属于另一个页面或因为某个条件,那么您将无法在 JavaScript 中访问它。

关于parameter-passing - 甲骨文顶点 : Accessing params passed through URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com