Dynamic List View通过WHERE子句绑定项值实现无刷新更新问题咨询
解决方案
你当前配置的问题出在刷新List View区域时,未将Select List的最新值同步到APEX会话状态,同时你的Select List查询返回值和查询条件不匹配,导致SQL查询的绑定变量读取不到正确值,按如下步骤调整即可:
步骤1:调整动态动作配置
删除原有动态动作里的空PL/SQL执行步骤,重新配置动态动作如下:
- 触发源:
P1_SELECT_LIST - 触发时机:
On Change - 动作1:提交页面项
- 需提交的项:填入
P1_SELECT_LIST,这一步仅将下拉框的最新值同步到会话状态,不需要执行任何PL/SQL逻辑
- 需提交的项:填入
- 动作2:刷新区域
- 刷新目标:
P1_LIST_VIEW - 执行时机设置为上一个动作完成后
- 刷新目标:
步骤2:修正基础属性配置
- 检查
P1_LIST_VIEW区域的要提交的页面项属性:填入P1_SELECT_LIST,确保刷新区域时会自动携带该项的最新值作为查询参数 - 修正
P1_SELECT_LIST的SQL查询:APEX的Select List查询规则是SELECT 显示值, 返回值 FROM 表,你当前的查询返回值为emp_id,和WHERE条件的manager_id不匹配,调整为:
SELECT DISTINCT manager_id, manager_id FROM emp;
如果需要显示经理姓名,改为SELECT emp_name, manager_id FROM emp WHERE emp_id = manager_id即可。
可选无绑定变量实现方案
如果你不想用绑定变量,也可以用客户端过滤实现,完全不需要服务端请求:
- 先把List View的SQL查询去掉WHERE条件,查询全量数据:
SELECT DISTINCT emp_name, emp_id, manager_id FROM emp;
- 给List View的每一行模板加上自定义属性
data-manager="&MANAGER_ID." - 给
P1_SELECT_LIST的On Change事件加JS代码,直接过滤行:
const selectedManager = apex.item('P1_SELECT_LIST').getValue(); $('[data-manager]').each(function() { $(this).toggle($(this).data('manager') == selectedManager); });
这种方案响应速度更快,适合数据量不大的场景。
内容的提问来源于stack exchange,提问作者Saieden
相关产品推荐
相关产品推荐

