填充Thymeleaf行,其中一列引用另一个表(Database)。需要另一列引用的Table来显示

时间:2018-01-14 17:24:38

标签: java spring-boot thymeleaf

我是springboot的初学者。我遇到了一个情况。哦,在我解释之前,让我给表格结构。

费用

expensesId, categories,

分类

categoryId, categoryname
  

费用表是指带有 categoryId 的类别表。

我可以使用从控制器发送的datatable填充expensesList以成功查看。但我的问题是我填充了columnid,但我希望用categoryname填充该列。我想了一段时间可能的解决方案,我想出了愚蠢的想法使用thymeleaf映射categoryIdcategoryName的情况,但我不想这样做因为我将来会有更多的类别在增长,代码很难维护。

我真的可以在这方面提供一些帮助。

Link to git project

expensespage link

expenses controller link

如果我在谷歌搜索期间错过了解决此问题的解决方案,请提供链接。

对标题部分的英语不好道歉,因为我无法进一步提出问题。

1 个答案:

答案 0 :(得分:0)

我刚刚将包含Id和name的类别对象添加到了每个费用对象中 费用对象列表并传递给控制器​​。现在我可以直接在View with Thymeleaf中使用CategoryName,如下所示

<td th:text="${expense.categories.categoryname}"></td>>

我在控制器中改变了什么。

<强>之前

@RequestMapping(value = "/expenses")
    public String toExpensesPage(Model model) {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        User user = monitorService.getUserByUserName(authentication.getName()).get(0);
        List<Categories>  categoriesList = monitorService.getAllCategories();
        model.addAttribute("expenses",new Expenses());
        if(categoriesList != null) {
            model.addAttribute("categories",categoriesList);
        }
        List<Expenses> expensesList = monitorService.getAllExpensesActive(user.getUserid());
        model.addAttribute("expensesList",expensesList);
        return "common/expensespage";
    }

要。

@RequestMapping(value = "/expenses")
public String toExpensesPage(Model model) {
    Map<Integer,String> categoryMap = new HashMap<Integer, String>();
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    User user = monitorService.getUserByUserName(authentication.getName()).get(0);
    /* getting Category List This contains both categoryId and categoryname */
    List<Categories>  categoriesList = monitorService.getAllCategories();
    /* Using hashmap to map id to name  so we dont need to iterate categoryList or call to database with category Id..*/
    for(int i = 0; i < categoriesList.size();i++){
        categoryMap.put(categoriesList.get(i).getCategoryid(),

categoriesList.get(i).getCategoryname());
        }
        model.addAttribute("expenses",new Expenses());
        if(categoriesList != null) {
            model.addAttribute("categories",categoriesList);
        }
        List<Expenses> expensesList = monitorService.getAllExpensesActive(user.getUserid());
        /*Assigning category object to expenses object*/
        for(int i = 0; i < expensesList.size();i++){
            Categories categories = new Categories();
            categories.setCategoryid(expensesList.get(i).getCategories().getCategoryid());
            categories.setCategoryname(categoryMap.get(expensesList.get(i).getCategories().getCategoryid()));
            expensesList.get(i).setCategories(categories);
        }
        model.addAttribute("expensesList",expensesList);
        return "common/expensespage";
    }

在代码中添加了关于我如何做的评论。希望有人觉得它有用。