Spring Boot / Thymeleaf - петля внутри петли - PullRequest
0 голосов
/ 24 июня 2019

У меня есть приложение с двумя объектами, имеющими двунаправленное отношение один ко многим.Владельцы и велосипеды.

Таким образом, получение владельцев с помощью curl даст

[
    {"id":1,
    "userName":"user1",
    "bicycles":
        [
            {
                "id":1,
                "make":"dawes",
                "model":"civic",
                "owner":1
            }
        ]
    },
    {"id":2,
    "userName":"user2",
    "bicycles":
        [
            {
                "id":2,
                "make":"whyte",
                "model":"montpellier",
                "owner":2
            }
            ,{
                "id":4,
                "make":"dahon",
                "model":"tern A7",
                "owner":2
            }
        ]
    } ]

, что хорошо.

Если я создам шаблон, который зацикливается в таблице,

<table>
    <tr th:each="owner : ${owners}">
      <td th:text="${owner.userName}"></td>
      <td th:text="${owner.bicycles[0].make}"
          th:if="${#lists.size(owner.bicycles)} > 0">"</td>
      <td th:text="${owner.bicycles[0].model}"
          th:if="${#lists.size(owner.bicycles)} > 0"></td> 
    </tr>
  </table>

тогда я получаю ожидаемый результат в браузере.Я понимаю, что вышеприведенный код ужасен, но я просто заинтересован в том, чтобы заставить тимелиф работать на данный момент.

Но если я сделаю следующий код

<table>
    <tr th:each="owner : ${owners}">
      <td th:text="${owner.userName}"></td>
      <tr th:each="bike : ${owner.bicycles}">
          <td th:text="${bike.make}"></td>
          <td th:text="${bike.model}"></td>  
      </tr>  
    </tr>
  </table>

, я получу следующую ошибку консоли

вложенным исключением является org.thymeleaf.exceptions.TemplateProcessingException: исключение, оценивающее выражение SpringEL: "owner.bicycles" (template: "nutsthymeleaf" - строка 23, столбец 15)] с основной причиной

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Свойство или поле 'велосипеды' не могут быть найдены в null

Что меня смущает, так это то, что owner.bicycle [index] работает.Это показывает марку и модель.Тем не менее, как видно из ошибки, owner.bicycles является пустым полем.

Так что, очевидно, я что-то делаю не так ...

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Итак, я нашел это

Thymeleaf: Получение свойства или поля не может быть найдено на нуле.Итерация списка внутри списка

, и это остановило SpelException.

Поиграв с ним, ему не нужно 3 уровня, а только два.Проблема возникает, если th: каждый вложен в th: каждый.Второй th: каждый должен быть в th: блок (или, возможно, div).

0 голосов
/ 24 июня 2019

Попробуйте if для проверки bicycles равно пусто или нет

<table>
    <tr th:each="owner : ${owners}">
      <td th:text="${owner.userName}"></td>
      <tr th:if={owner.bicycles != null} th:each="bike : ${owner.bicycles}">
          <td th:text="${bike.make}"></td>
          <td th:text="${bike.model}"></td>  
      </tr>  
    </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...