我将 Apex 4.0.2 与 Oracle XE 11 结合使用。
我有一个表格,上面有一个字段,P200_CARD_TYPE
,是从值列表中设置的。我想要发生的是使用我在设置“仅显示”字段的查询中选择的值,P200_DESC
在源代码部分中P200_DESC
,我将“源类型”设置为“SQL 查询”:
SELECT CARD_DESC
FROM CARDTYPE
WHERE card_type = :P200_CARD_TYPE;
我遇到的问题是让 Apex 以这种方式运行。
为了P200_CARD_TYPE
,如果我将“值更改时的页面操作”设置为“重定向并设置值”,则P200_CARD_TYPE
变量似乎已设置,(我将其写到表中)但是
- 它不会保留在字段显示中,(返回到我的空显示设置)
-
P200_DESC
不认识P200_CARD_TYPE
绑定变量
If on P200_CARD_TYPE
,我有“值更改时的页面操作”设置,所以没有,我的选择保留在屏幕上,但我无法坚持到表格和P200_DESC
看来还是没认出来。
我会想,一旦我从 LOV 中做出选择,P200_CARD_TYPE
已设置,我可以在其他地方使用它。
看来您还没有正确理解会话状态。此类问题在这里和 OTN 顶级论坛上经常出现。
来自文档: http://docs.oracle.com/cd/E37097_01/doc/doc.42/e35125/concept_ses.htm#BEIHBFJJ
HTTP 是最常传送 HTML 页面的协议,
无状态协议。 Web 浏览器仅连接到服务器
与下载完整页面所需的时间一样长。此外,每个
页面请求被服务器视为独立事件,
与之前发生的或可能发生的任何页面请求无关
发生在未来。访问在某一页上输入的表单值
在后续页面中,这些值必须存储为会话状态。甲骨文
Application Express 透明地维护会话状态并提供
开发人员能够从中获取和设置会话状态值
应用程序中的任何页面。
在您的情况下,这意味着您认为从该 LOV 中选择一个值会改变该项目的会话状态。它不是。您在客户端选择一个值,该值仅在客户端可用,直到以某种方式推送到服务器。
这对于理解 apex 至关重要!在继续之前你需要理解这一点,因为你会再次遇到类似的情况。
现在我们已经解决了这个问题,让我们继续讨论如何解决这个问题。
将值推送到服务器的最基本方法?执行页面提交。所有项目的会话状态将使用它们在客户端保存的值进行设置(例外情况适用,但现在让我们忽略它)。
这是您的选择列表操作出错的地方:您执行了重定向。重定向不是页面提交,而只是重定向。通过设置目标项目的值,您只能更改该项目的会话状态。
因此,并不是 SQL 无法识别该变量,而是它没有值,因此无法呈现任何内容。
当然,您可能不想仅仅为了设置字段的值而提交页面。提交可能会导致验证、分支或流程触发。
这就是 Tony Andrews 的建议:使用动态操作来动态检索值。例如,您可以这样设置:
现在,当选择列表上的值发生变化时,将调用服务器/数据库,并返回一个值并在描述项中设置。
还有更多内容,但这应该会让您朝着正确的方向前进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)