2017-02-26 103 views
0

我有一個頁面向Thymeleaf/Spring Boot項目中的用戶顯示可見列表。列表有一個owner_id,而非擁有者的姓名,所以他們的名稱,而不是ID填充列表,我做一個單獨的數據庫調用來檢索所有業主的ID和名稱,像這樣:無法使用長密鑰在Thymeleaf中獲取HashMap值

@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

看起來有兩種方法可以得到這個工作:

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

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

我會用第一。第二,如果是表格,你必須使用。