Я немного застрял в одном из вопросов в последнее время. Я использую тимелеаф для рендеринга html после получения ответа. У нас есть сложный JSON, который выглядит следующим образом:
{
"lastMonth": 11,
"firstMonth": 9,
"reportData": {
"123456": {
"usageByMonth": {
"9": 233,
"10": 233,
"11": 218
},
"company": "Some Company"
},
6768592": {
"usageByMonth": {
"9": 5,
"10": 5,
"11": 5
},
"companyName": "another company name"
}
}
}
Я хочу показать эти значения для каждого отчета в таблице html. Я установил контекст, как показано ниже.
val reports = repservice.fetchReport(stringy)
val context = Context()
context.setVariable("report", report)
Поскольку я не очень хорошо разбираюсь в интерфейсе/thymeleaf, я немного запутался в том, как я могу пройти через это. Например, я пытаюсь создать таблицу, которая выглядит так.
|Company|FirstMonth|LastMonth|
|Some Company|233|218|
|another company name|5|5|
Ваши предложения и ответы будут высоко оценены.
Примечание. Если вы считаете, что вопрос немного сбивает с толку, прокомментируйте его, я сделаю его более понятным.
Спасибо !
Ну, после небольшого исследования и попытки. Я нашел ответ. Таким образом, тимелеаф можно повторять с помощью хэш-карт Java. Например. Если вы хотите повторить JSON выше в вопросе. Что мы можем сделать, так это следующее.
<table>
<thead>
<tr>
<th>
Kunde
</th>
<th>FirstMonth</th>
<th>LastMonth</th>
</tr>
</thead>
<tbody>
<tr th:each = "reporting: ${report.reportData}">
<td th:text = "${reporting.value.companyName}"></td>
<td class = "tableValue" th:text = "${reporting.value.usageByMonth[report.firstMonth]}"></td>
<td class = "tableValue" th:text = "${reporting.value.usageByMonth[report.lastMonth]}"></td>
</tr>
</table>
При этом я получил то, что мне было нужно. Если вы тоже столкнулись с подобной проблемой, не стесняйтесь спрашивать. :)
Прежде всего, контекст должен быть установлен следующим образом:
context.setVariable("reports", reports)
Пример таблицы на www.thymeleaf.org включает итерацию. Я не знаю, как выглядят ваши отчеты о переменных после разбора JSON. Но из JSON может работать что-то вроде следующего:
<table>
<thead>
<tr>
<th>Company</th>
<th>FirstMonth</th>
<th>LastMonth</th>
</tr>
</thead>
<tbody>
<tr th:each = "key: ${report["reportData"].keys}">
<td th:text = "${reportData[key]["companyName"]}"></td>
<td th:text = "${reportData[key]["usageByMonth"][report["firstMonth"].toString()]}"></td>
<td th:text = "${reportData[key]["usageByMonth"][report["lastMonth"].toString()]}"></td>
</tr>
</tbody>
</table>