Oracle APEX:交互式网格选中行ID跨页面传递失败问题
问题分析与解决方案
问题根源
你用JavaScript动态设置的隐藏项值,仅保存在浏览器客户端内存中,并未同步到APEX的服务器端会话状态。而APEX页面跳转时,默认是基于服务器端会话中存储的项值进行参数传递,所以即便客户端能拿到值,服务器端没有这个值,跳转后目标页面自然接收不到。
解决方案
方案1:设置项值时同步提交到服务器
修改你Selection Change动态动作里的JavaScript代码,使用APEX官方的apex.itemAPI并开启服务器端同步:
// 获取IG选中行的PK_CONCE值 var ig = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid"); var selectedRow = ig.model.getSelectedRecords()[0]; if (selectedRow) { var pkValue = selectedRow.values.PK_CONCE; // 第二个参数true表示将值提交到服务器会话 apex.item("P16_PK_CONCE").setValue(pkValue, true); }
这样设置后,隐藏项的值会同时更新客户端和服务器端会话状态,跳转按钮传递参数时就能正常读取到这个值。
方案2:跳过隐藏项,直接从IG传递参数
如果不想依赖隐藏项,可以直接在跳转按钮的导航设置中,从Interactive Grid获取选中行ID并传递:
- 编辑跳转按钮的“导航到页面”动作
- 在“设置项”区域,添加目标页面的Popup-LOV项
- 将“值”的类型改为JavaScript表达式,填入以下代码:
var ig = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid"); var selectedRow = ig.model.getSelectedRecords()[0]; return selectedRow ? selectedRow.values.PK_CONCE : null;
这样按钮跳转时会直接从IG获取选中行ID,无需经过隐藏项,避免客户端/服务器端值不同步的问题。
方案3:检查会话状态保护设置(可选)
如果上述方案无效,检查隐藏项P16_PK_CONCE的“会话状态保护”属性:
- 确保设置为Unrestricted(无限制),或者根据你的安全需求设置为合适的选项,避免因会话保护导致值无法被传递。
内容的提问来源于stack exchange,提问作者ThomasT
相关产品推荐
相关产品推荐

