【问题标题】:How to fill list in one entity with data from another entity如何用另一个实体的数据填充一个实体中的列表
【发布时间】:2023-01-26 10:53:00
【问题描述】:

所以,在我的 Spring Boot APP 中,我有 Transaction 表,所以每个用户都可以创建一个事务,我想以这种方式在适当的页面上显示该事务:

https://i.stack.imgur.com/3ecf9.png

我希望你得到我想要使用的格式。因此,例如,如果用户今天创建了两个交易,则向他显示该交易,但如果用户昨天没有创建交易,则跳过该日期并再次显示用户进行交易的日期。

所以要点是显示一个单独的日期,其中有一个交易。

为了做这样的事情,我创建了一个单独的实体来保存日期和交易列表。像这样:

public class TransactionGroup {
  private LocalDate date;
  private List<Transaction> transactions;
  /* getters and setters */
}

在 thymeleaf 中,我创建了这样的东西:

<div th:each="group : ${transactionGroup}">
<h1 th:text="${group.date}" />

<div th:each="transaction : ${group.transactions}">
    <h2>Amount: <span th:text="${transactions.amount}"></span></h2><br>
    <h2>Note: <span th:text="${transactions.note}"></span></h2><br>
    <h2>Wallet name: <span th:text="${transactions.walletName}"></span></h2><br>
    <h2>Expense Category: <span th:text="${transactions.expenseCategories}"></span></h2><br>
    <h2>IncomeCategory: <span th:text="${transactions.incomeCategories}"></span></h2>
<div>

现在,这是保存交易的服务,在里面我试图填写列表,但我认为这实际上是一个问题:

 @PostMapping("/saveIncome/{walletId}")
public String saveIncome(@PathVariable(value = "walletId") long walletId, @Valid Transaction transaction, BindingResult result, Model model) {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    UserDetailsImpl user = (UserDetailsImpl) authentication.getPrincipal();
    long userId = user.getId();

    Wallet wallet = walletService.getWalletById(walletId);

    TransactionGroup transactionGroup = new TransactionGroup();

    transaction.setWallet(wallet);
    transaction.setUserId(userId);
    transaction.setWalletName(wallet.getWalletName());
    transactionGroup.setTransactions(transaction.getWalletName(), transaction.getAmount(), transaction.getDate(), transaction.getNote(), transaction.getExpenseCategories(), transaction.getIncomeCategories());
    transactionService.saveIncome(transaction, walletId, userId);
    return "redirect:/api/wallet/userWallet/balance/" + userId;
}

这是上面控制器的行:

transactionGroup.setTransactions(transaction.getWalletName(), transaction.getAmount(), transaction.getDate(), transaction.getNote(), transaction.getExpenseCategories(), transaction.getIncomeCategories());

这就像 TransactionGroup 类中的方法:

public void setTransactions(String walletName, Double amount, LocalDate date, String note, ExpenseCategories expenseCategories, IncomeCategories incomeCategories) {
}

此外,这是用于在页面上显示事务的控制器:

@GetMapping("/userTransactions/{user_id}")
public String getUserTransactions(@PathVariable("user_id") long user_id, Model model) {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    UserDetailsImpl user = (UserDetailsImpl) authentication.getPrincipal();
    long userId = user.getId();
    TransactionGroup transactionGroup = new TransactionGroup();
    model.addAttribute("transactionGroup", transactionGroup);
    model.addAttribute("userId", userId);
    model.addAttribute("transactions", transactionService.findDistinctIdByUserId(user_id));
    return "transactions";
}

因此,当我运行该程序并转到交易应该是页面的页面时,页面是空的。我猜想从 TransactionGroup 班级填写列表有问题,但仍然找不到合适的方法来解决这个问题。

【问题讨论】:

    标签: java spring spring-boot thymeleaf


    【解决方案1】:

    我认为您的问题出在 getUserTransactions 方法中,包含这些行。

    TransactionGroup transactionGroup = new TransactionGroup();
    model.addAttribute("transactionGroup", transactionGroup);
    model.addAttribute("transactions", transactionService.findDistinctIdByUserId(user_id));
    

    您正在创建一个新的事务组,并将其添加到模型中,然后单独添加您的 transactions 属性。但是在您的 html 中,您正在迭代组内的交易 - &lt;div th:each="transaction : ${group.transactions}"&gt;

    因此,您要么需要遍历 &lt;div th:each="transaction : ${transactions}"&gt; 之类的事务属性,要么需要将事务属性设置到事务组中,并且只在模型中包含该组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多