Spring Boot / Thymeleaf-循环内循环

时间:2019-06-24 13:27:45

标签: java spring-boot thymeleaf

我有一个包含两个实体的应用程序,它们之间具有双向的一对多关系。车主和自行车。

因此通过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”(模板:   “ nutsthymeleaf”-第23行,第15列)]根本原因

     

org.springframework.expression.spel.SpelEvaluationException:EL1007E:   属性或字段“自行车”找不到null

我感到困惑的是owner.bicycle [index]有效。它显示了品牌和型号。但是根据错误,owner.bicycles似乎是空字段。

所以很明显我做错了...。

2 个答案:

答案 0 :(得分:0)

尝试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>

答案 1 :(得分:0)

所以我找到了

Thymeleaf: Getting Property or field cannot be found on null. Iteration of list inside a list

并且已经停止了SpelException。

已经玩过它了,它不需要3个级别,而只需2个级别。如果th:each嵌套在th:each中,则会出现问题。第二个th:each必须位于一个th:block(或div)中。