无法使用长键在Thymeleaf中获取HashMap值

时间:2017-02-26 00:56:02

标签: spring spring-boot thymeleaf

我有一个页面向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

1 个答案:

答案 0 :(得分:1)

看起来有两种方法可以让它发挥作用:

<td th:text="${userMap.get(publicList.owner)}">Default Owner</td>

<td th:text=${userMap[__${publicList.owner + 'L'}__]}">Default Owner</td>

我会用第一个。我认为,第二个你必须使用表格。