#sapui5
#sapui5
Вопрос:
Я хочу отобразить простую таблицу, используя представления XML. У меня есть модель, которая загружает данные из файла JSON. Я использую классы ‘sap.ui.table’ и ‘sap.m’. Проблема в том, что я не могу извлечь данные из представления. Я думаю, что мне чего-то не хватает при привязке или загрузке библиотек или, возможно, в коде начальной загрузки.
Примечание: Найдите привязку в представлении:
Ниже приведены фрагменты кода :
1) Data.json
{
"empstr":
{
"eId": 100,
"eName": "Prathamesh",
"eSalary": 2400,
"currency": "INR"
},
"empTab": [{
"eId": 100,
"eName": "Prathamesh",
"eSalary": 2400,
"currency": "INR"
}, {
"eId": 200,
"eName": "Prateek",
"eSalary": 2500,
"currency": "USD"
}, {
"eId": 300,
"eName": "Simar",
"eSalary": 1200,
"currency": "INR"
}, {
"eId": 400,
"eName": "Sahil",
"eSalary": 1350,
"currency": "EUR"
}, {
"eId": 500,
"eName": "Sakshi",
"eSalary": 500,
"currency": "USD"
}, {
"eId": 600,
"eName": "Soumya",
"eSalary": 12000,
"currency": "INR"
}, {
"eId": 700,
"eName": "Laxman",
"eSalary": 240000,
"currency": "INR"
}
]
}
2) Main.view.xml
<mvc:View xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:table="sap.ui.table"
controllerName="akhil.controller.Main"
xmlns:html="http://www.w3.org/1999/xhtml">
<table:Table id="myTab1"
selectionMode= "None"
rows="{/empTab}">
<table:title>
<Text text="Table header"></Text>
</table:title>
<table:columns>
<table:Column>
<table:label>
<Label text = "Emp Id"></Label>
</table:label>
<table:template>
<Text text="{eId}"></Text>
</table:template>
</table:Column>
<table:Column>
<table:label>
<Label text = "Emp Name"></Label>
</table:label>
<table:template>
<Text text="{eName}"></Text>
</table:template>
</table:Column>
<table:Column>
<table:label>
<Label text = "Emp Salary"></Label>
</table:label>
<table:template>
<Text text="{eSalary}"></Text>
</table:template>
</table:Column>
<table:Column>
<table:label>
<Label text = "Currency"></Label>
</table:label>
<table:template>
<Text text="{/empTab/currency}"></Text>
</table:template>
</table:Column>
</table:columns>
</table:Table>
</mvc:View>
3) Main.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function (Controller) {
"use strict";
return Controller.extend("akhil.controller.Main", {
onInit: function () {
var oModel = new sap.ui.model.json.JSONModel();
oModel.loadData("/ExerciseBinding/Data.json");
this.getView().setModel(oModel);
}
});
});
4) myhtml.html
<!DOCTYPE html>
<html>
<head>
<script id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m, sap.ui.table"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-bindingsyntax="complex"
data-sap-ui-resourceroots='{
"akhil": "./"
}'
>
</script>
<script>
var oView = new sap.ui.view({
id:"idMain3",
viewName:"akhil.view.Main",
type: "XML"
});
oView.placeAt("XMLcontent");
</script>
</head>
<body class="sapUiBody">
<div id="XMLcontent">
</div>
</body>
</html>
5) Ошибка, показанная на изображении ниже.
Я что-то упускаю, но не могу понять, что именно. Я ценю ваш отзыв. Данные не заполняются в представлении.
Комментарии:
1. 404, путь к вашему json, должно быть, неверный. Где ваш файл JSON? Это внутри проекта? Если нет, вам нужно создать назначение с помощью SCP для его извлечения
Ответ №1:
Ваше приложение не может найти файл данных вашей модели — откуда 404. Приведенная ниже строка кода приведет к тому, что ваше приложение ui5 будет искать в корневом каталоге веб-сервера, с которого вы обслуживаетесь:
oModel.loadData("/ExerciseBinding/Data.json");
Например. вышеупомянутое выглядело бы, скажем, http://<yourserverbaseurl>/ExerciseBinding/Data.json
Вряд ли это то место, где вы разместили приложение и сам файл json.
Проверьте вкладку сеть в Chrome Developer Tools, чтобы увидеть, где на самом деле выглядит ваше приложение по сравнению с где они на самом деле находятся на вашем веб-сервере.
Ответ №2:
Всякий раз, когда создается относительный путь для ссылки на ресурс, используйте API sap.ui.require.toUrl
:
// Given data-sap-ui-resourceroots='{ akhil: "./" }'
const realPath = sap.ui.require.toUrl("akhil/ExerciseBinding/Data.json"); // "./ExerciseBinding/Data.json"
oMyJSONModel.loadData(realPath);
Проверьте описание API для получения дополнительной информации.