如何在百里香中使用两个不同的范围:分配

时间:2016-01-17 15:03:28

标签: spring-mvc thymeleaf spring-el

我在表单中有以下构造:

<tr th:each="team : ${teams}" th:with="checked = *{#lists.contains(userTeams, team.internalId)}">

其中:

  • userTeams- List - 表单支持bean中的字段 - not null
  • 团队 - 列表 - 全局模型属性
  • team.internalId - String,not null

结果:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 7): Property or field 'internalId' cannot be found on null

第2版

<tr th:each="team : ${teams}" th:with="checked = *{#lists.contains(userTeams, __${team.internalId}__)}">

和例外:

org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 7): Property or field 'b' cannot be found on object of type 'x.domain.UserWrapper' - maybe not public?

team.internalId应该是“b-123”字符串,但是,它被评估为一个aritmetic操作,因此字段'b'

如何正确地将'team.internalId'值传递给contains()方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

错误消息Property or field 'internalId' cannot be found on null表示您的team变量实际上为空,这意味着您的teams列表中存在空元素。

如果你不期望你的teams有任何空项,那么你需要看一下填充它的内容,看看它是如何到达那里的。

如果您希望teams有空项,那么

  1. 您想使用team?.internalId之类的Safe Navigation operator。这不会在null上给出错误,但只会传播null值。或者,
  2. 您根本不想处理空值,在这种情况下您应该跳过它们,如下所示:

    <tr th:each="team : ${teams}" th:if="${team != null}" th:with="checked = *{#lists.contains(userTeams, team.internalId)}">