2016-02-05 82 views
2

我創建了一個SAPUI5表小部件並確保它可以正常工作。現在,當點擊一行時,詳細視圖被加載,但沒有數據存在。服務器公開一個實體Site,其主鍵類型爲「string」。ODataModel v2中的URI編碼

客戶機側代碼如下(假設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

如果您確實認爲這是一個值得修復的bug,請將其發佈到他們的github存儲庫中:https://github.com/SAP/openui5/issues – Marc

+0

感謝您的建議Marc。我已經提交了一張票:https://github.com/SAP/openui5/issues/830 –

回答

0

而不是發送

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

實際字符串發送到服務器應該是

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

哪個是encodeURI()調用的結果。由於UI5允許您自由定義模型URL及其參數,因此必須注意正確的URI編碼(以及所有參數)。

所以在我看來,這不是一個錯誤,而是配置URI的可能性,而沒有UI5的「黑盒子」行爲。