您必须使用代理 servlet 来解决您的 CORS 问题。
在文件 manifest.json 的配置 json 中,添加指向您的 odata 服务或数据提供者的链接,例如:
"config": {
"oDataRemote": "http://exampleService.com/sap/opu/odata/sap/<ServiceName>",
"oDataProxyRemote": "proxy/sap/opu/odata/sap/<ServiceName>",
}
在您的 Components.js 中获取 URL 链接并启动您的 oData 模型:
var oConfig = this.getMetadata().getConfig(); //get variables of config json defined in manifest.json
// Define if proxy is required or not
if (window.location.hostname == "localhost") {
sServiceUrl = oConfig.oDataProxyRemote;
} else {
sServiceUrl = oConfig.oDataRemote;
}
确定 uri 后,在您的 components.js 中启动 odata 模型:
var oODataModel = new sap.ui.model.odata.ODataModel(sServiceUrl, mParameters);
this.setModel(oODataModel, "oDataModel");
在 WEB-INF 文件夹中,您需要将以下 servlet 添加到您的 web.xml:
<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->
<servlet>
<servlet-name>SimpleProxyServlet</servlet-name>
<servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleProxyServlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>com.sap.ui5.proxy.REMOTE_LOCATION</param-name>
<param-value>{protocol}://{host name}:{port number}</param-value>
</context-param>
简单的代理 servlet 仅用于测试目的。如果您的生产环境需要它,您需要一个成熟的代理 servlet。我建议使用反向代理(例如 Apache HTTP Server),将所有 Web 和应用程序服务器集中在一个域中。
您也可以查看 SAP simple proxy servlet提供的示例