Xpages联动下拉框切换父选项时子下拉框消失问题求助
Xpages联动下拉框切换父选项时子下拉框消失问题求助
各位大佬好,我遇到一个奇怪的Xpages联动下拉框问题,想请大家帮忙看看怎么解决:
我做了两个联动的下拉框:
- 第一个下拉框
cadcri_est:从estmun.nsf数据库里加载州的列表 - 第二个下拉框
cadcri_cid:根据第一个下拉框选中的州,加载对应的城市列表
cadcri_cid的values代码如下:
// 1st do return ""; // 2nd after var dbname1 = session.getServerName() + "!!" + "estmun.nsf"; var categoryComp = getComponent("cadcri_est"); if ((categoryComp) == null) return ""; var category = categoryComp.getValue(); if (category == "") return ""; var res = @Unique(@DbLookup(dbname1, "vestmun", category, 2)); document1.replaceItemValue("cadcri_cid", ""); return res;
另外我在第一个下拉框的onchange事件里,给cadcri_cid设置了Partial Update(局部更新)。
现在的问题是:用户先选州,再选城市,之后如果想换另一个州,第二个城市下拉框就直接消失了,只有刷新整个页面才会回来。但如果用户先把选中的城市清空(下拉框第一个选项是空字符串""),再换州,城市列表就能正常加载。
我试过在重新加载城市列表前,先给cadcri_cid的values设空值(就像手动清空那样),但没起作用。有没有大佬知道怎么解决这个问题?
可能的解决思路(供参考)
- 检查局部更新的目标范围:确认Partial Update的目标是不是精准指向
cadcri_cid组件,有没有不小心把它的父容器排除在外,或者父容器有其他影响渲染的属性? - 手动重置子下拉框选中值:在父下拉框的
onchange事件里,先通过JS获取cadcri_cid组件,把它的选中值设为空,再触发局部更新。比如:var cidComp = getComponent("cadcri_cid"); if (cidComp) { cidComp.setValue(""); } // 然后触发Partial Update - 确保返回的城市列表包含空选项:在
cadcri_cid的values代码里,把空字符串加到返回的结果数组最前面,比如改成:var res = @Unique(@DbLookup(dbname1, "vestmun", category, 2)); res.unshift(""); // 把空选项加到数组开头 document1.replaceItemValue("cadcri_cid", ""); return res; - 检查子下拉框的组件属性:看看
cadcri_cid的showEmptyOption是不是设为true,或者在局部更新时有没有开启disableValidators(避免验证规则导致组件不渲染)。 - 改用手动触发局部刷新:把父下拉框的onchange事件改成手动调用XSP的局部刷新方法,比如:
XSP.partialRefreshGet("#{id:cadcri_cid}", { onStart: function() { // 开始刷新前重置子组件值 var cid = document.getElementById("#{id:cadcri_cid}"); if (cid) cid.value = ""; } });
备注:内容来源于stack exchange,提问作者Marcelo Duarte
相关产品推荐
相关产品推荐

