ODataModel v2中的URI编码

时间:2016-02-05 08:06:12

标签: javascript odata sapui5

我已经创建了一个SAPUI5表小部件,并确保它可以正常工作。现在,单击某行时,将加载详细信息视图,但不会显示任何数据。服务器使用类型为“string”的主键公开实体Site。

客户端代码如下(假设oModel是ODataModel,sSiteCode是一个可能包含西里尔字符的字符串):

        // sSiteCode may contain Cyrillic characters
        var oKey = {
            SiteCode: sSiteCode
        };
        var sPath = "/" + oModel.createKey("Sites", oKey);
        this.getView().bindElement({path: sPath});

事实证明,如果sSiteCode ='б'(即包含西里尔字符),则GET请求将(通过批处理)发送到以下URI:

http://<server>:<port>/odata/Sites('б')

但是,服务器无法解析此URI(并随后回复404),因为它不知道要使用什么编码。我修改了ODataModel.prototype._createRequestUrl方法,如下所示:

    sNormalizedPath = this._normalizePath(sPath, oContext);
    sNormalizedPath = encodeURI(sNormalizedPath); // my addition

然后它似乎有用,对于这个特殊情况。我想知道这是一个错误还是一个功能,我接下来该怎么办?

仅供参考,我使用的是OpenUI5 1.32.11。

1 个答案:

答案 0 :(得分:0)

而不是发送

http://<server>:<port>/odata/Sites('б')

发送到服务器的实际字符串应为

http://<server>:<port>/odata/Sites(%27б%27)

这是encodeURI()电话的结果。由于UI5允许您自由定义模型URL及其参数,因此您必须注意正确的URI编码(以及所有参数)。

所以在我看来,这不是一个错误,而是在没有UI5的“黑盒子”行为的情况下配置URI的可能性的下半部分。