我有一个页面向Thymeleaf / Spring Boot项目中的用户显示可见列表。列表有一个owner_id
,但不是所有者的名字,所以要用名称而不是id来填充列表,我会进行单独的数据库调用以检索所有所有者的ID和名称,如下所示:
@Controller
public class ThymeleafController {
private final ListController listController = new ListController();
private final UserController userController = new UserController();
private final ItemController itemController = new ItemController();
@RequestMapping("/user/{user_id}")
public String user_page(@PathVariable("user_id") long user_id, Model model) {
// model.addtoAttribute("name", "World");
UserMetaData user = userController.getUserMetaData(user_id);
ArrayList<User> users = (ArrayList)userController.allUsers();
HashMap<Long, String> userMap = new HashMap<Long, String>();
for (int i = 0; i < users.size(); i++) {
userMap.put(users.get(i).getId(), users.get(i).getUserName());
}
model.addAttribute("user", user);
model.addAttribute("userMap", userMap);
return "user";
}
}
要使用所有者名称而不是所有者ID填充表格,模板中将使用以下代码:
<table class="table table-striped">
...
<tbody>
<tr th:each="publicList: ${user.public_lists}">
...
<td th:text="${userMap[__${publicList.owner}__]}">Default Owner</td>
...
</tr>
</tbody>
</table>
但是,加载模板时出现以下异常。
Caused by: org.springframework.expression.spel.SpelParseException: EL1035E: The value '5760744339537920' cannot be parsed as an int
我不确定当密钥为int
时,为什么会尝试将其解析为long
。有没有办法让Thymeleaf将值解析为long
?
答案 0 :(得分:1)
看起来有两种方法可以让它发挥作用:
<td th:text="${userMap.get(publicList.owner)}">Default Owner</td>
或
<td th:text=${userMap[__${publicList.owner + 'L'}__]}">Default Owner</td>
我会用第一个。我认为,第二个你必须使用表格。