You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAPUI5中向Router.navTo传递MultiComboBox的数组值

SAPUI5中MultiComboBox值传递给路由navTo的解决方案

问题背景

将原有的soldTo普通ComboBox改为MultiComboBox后,this.soldTo变为数组,调用路由跳转时出现错误:

Uncaught TypeError: Cannot read properties of null (reading 'length')

原路由调用代码:

this._oRouter.navTo("SearchResult", {
    soldTo: this.soldTo,
    shipTo: this.shipTo,
}, false);

原manifest.json路由配置中SearchResult的pattern为:

"pattern": "{soldTo}/{shipTo}/SearchResult"

问题原因

SAPUI5路由参数默认仅支持字符串类型,直接传递数组会导致路由解析逻辑异常;同时原路径式的参数占位符无法适配多值场景,进一步引发参数解析错误。

解决方案

1. 转换数组为字符串传递

将MultiComboBox的数组值转换为逗号分隔的字符串,同时处理空值避免参数异常:

this._oRouter.navTo("SearchResult", {
    soldTo: this.soldTo?.join(",") || "", // 数组转逗号分隔字符串,空数组/空值时传空串
    shipTo: this.shipTo
}, false);

2. 修改路由配置为查询参数模式(推荐)

路径式参数更适合单值场景,多值参数建议改用查询参数,修改manifest.json中SearchResult的路由配置:

{
    "pattern": "SearchResult?soldTo={soldTo}&shipTo={shipTo}",
    "name": "SearchResult",
    "target": [
        "SearchResult"
    ]
}

3. 目标页面接收参数并转回数组

在SearchResult页面控制器中,将接收的字符串参数转回数组:

onInit: function() {
    this.getRouter().getRoute("SearchResult").attachPatternMatched(this._onPatternMatched, this);
},

_onPatternMatched: function(oEvent) {
    const oArguments = oEvent.getParameter("arguments");
    // 字符串转回数组,处理空参数情况
    const aSoldTo = oArguments.soldTo ? oArguments.soldTo.split(",") : [];
    const sShipTo = oArguments.shipTo;

    // 后续业务逻辑使用aSoldTo数组
    // ...
}

可选方案:路径式多值参数(不推荐)

若坚持使用路径参数,可在pattern中添加*标记支持多值,但需注意参数编码:

  • 修改manifest.json的pattern:
"pattern": "{soldTo*}/{shipTo}/SearchResult"
  • 传递时用特殊分隔符(如|)拼接数组:
soldTo: this.soldTo?.join("|") || ""
  • 接收时拆分:
const aSoldTo = oArguments.soldTo ? oArguments.soldTo.split("|") : [];

这种方式需注意分隔符不能与参数值冲突,查询参数模式更灵活可靠。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:01:22