我已经创建了一个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。
答案 0 :(得分:0)
而不是发送
http://<server>:<port>/odata/Sites('б')
发送到服务器的实际字符串应为
http://<server>:<port>/odata/Sites(%27б%27)
这是encodeURI()
电话的结果。由于UI5允许您自由定义模型URL及其参数,因此您必须注意正确的URI编码(以及所有参数)。
所以在我看来,这不是一个错误,而是在没有UI5的“黑盒子”行为的情况下配置URI的可能性的下半部分。