Oracle Apex树形控件选中节点功能失效求助
我来给你梳理几个大概率能解决问题的排查方向,都是平时做Apex项目时遇到过的常见坑:
核对页面项名称的准确性:先确认树形区域「Selected Node Page Item」属性里填的文本项名称完全正确,Apex对页面项名称的大小写是敏感的,比如你的文本项是
P1_SELECTED_NODE,就别写成p1_selected_node或者P1_Selected_Node,差一个大小写都不行。检查树形区域的SQL返回列:树形区域的数据源SQL必须正确返回节点的ID列(默认是
id,如果自定义了节点ID列,要在树形区域属性里指定)。举个例子,你的SQL得是类似这样的结构:SELECT department_id AS id, parent_department_id AS parent_id, department_name AS name FROM departments CONNECT BY PRIOR department_id = parent_department_id START WITH parent_department_id IS NULL如果你的SQL里没返回
id列(或者指定的节点ID列),那Apex根本没值可以传到文本项里。确认页面项的状态设置:检查目标文本项的「Session State Protection」是不是设成了「Unrestricted」,如果设成了「Restricted - May not be updated from browser」,那前端的赋值操作会被阻止。另外,也别把文本项设成「只读」状态(不过只读状态其实不影响后台赋值,但保险起见还是确认下)。
查看浏览器控制台的JS报错:打开浏览器开发者工具(按F12)切换到「控制台」标签,选中树形节点时看看有没有报错信息。有时候页面上的自定义JS、其他插件会和Apex树形的内置JS冲突,导致赋值逻辑没触发。
检查树形区域的节点选择行为:确认树形区域的「Node Selection Behavior」属性是「Select」(默认值),如果改成了「None」或者自定义了节点点击事件,那默认的选中赋值逻辑就不会执行。要是你加了自定义的
onclick事件,记得别用return false或者阻止默认事件,不然会覆盖Apex的默认行为。测试最简页面排除冲突:如果上面都排查过还是不行,建议新建一个空白页面,只放一个树形区域和一个文本项,用最简单的数据源(比如从EMP表构造个简单树形),配置好「Selected Node Page Item」后测试。如果这个最简页面能正常赋值,那说明原来的页面里有其他元素(比如动态动作、自定义插件、其他JS)导致了冲突,再逐步往最简页面里加元素排查。
内容的提问来源于stack exchange,提问作者Markus

