【发布时间】: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