如何使用 jsp 视图检查某个用户是否创建了数据库项目
How to check if certain user has made database items using jsp view
我有一个名为 bookings 的数据库 table,我正在尝试做但到目前为止找不到的是检查 if-else,是否有特定用户进行的预订,并将它们显示在 table.
中
所以我正在寻找这样的东西:
(下面是半伪代码)
<c:when test="${bookings.where(booking.userId == currentUserId) > 0}">
display table with those items...
</c:when>
这样我就可以获得该用户制作的所有 table 项
如何在 jsp 查看页面中测试它?
提前致谢。
PS: 显示项目不是问题,我至少可以自己做:)
编辑后端部分 :
@GetMapping("/bookings")
public String getAllBookings(Model model) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetail = (UserDetails) auth.getPrincipal();
User user = userService.findByUsername(userDetail.getUsername());
int currentUserId = user.getId();
List<Booking> bookings = bookingService.getAllBookings();
model.addAttribute("bookings", bookings);
model.addAttribute("currentUserId", currentUserId);
model.addAttribute("currentUser", getPrincipal());
return "booking-list";
}
首先,您可能应该在后端执行此操作并只传递过滤列表,但对于 jsp 方法,您可以使用 forEach
。
示例:
<c:forEach items="${bookings}" var="booking">
<c:if test="${booking.userId == currentUserId}">
...
</c:if>
</c:forEach>
编辑:问题已更新
要在后端过滤预订,您可以使用 Stream API
:
List<Booking> bookings = bookingService.getAllBookings().stream()
.filter(b -> b.getUserId() == currentUserId)
.collect(Collectors.toList());
model.addAttribute("bookings", bookings);
编辑 2.0:
实际上,您甚至不应该在 java 中过滤它们。由于您从数据库中获取数据,因此您应该实施 getBookingsForUserId()
并使用 WHERE
子句来过滤它们。
我有一个名为 bookings 的数据库 table,我正在尝试做但到目前为止找不到的是检查 if-else,是否有特定用户进行的预订,并将它们显示在 table.
中所以我正在寻找这样的东西:
(下面是半伪代码)
<c:when test="${bookings.where(booking.userId == currentUserId) > 0}">
display table with those items...
</c:when>
这样我就可以获得该用户制作的所有 table 项
如何在 jsp 查看页面中测试它?
提前致谢。
PS: 显示项目不是问题,我至少可以自己做:)
编辑后端部分 :
@GetMapping("/bookings")
public String getAllBookings(Model model) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetail = (UserDetails) auth.getPrincipal();
User user = userService.findByUsername(userDetail.getUsername());
int currentUserId = user.getId();
List<Booking> bookings = bookingService.getAllBookings();
model.addAttribute("bookings", bookings);
model.addAttribute("currentUserId", currentUserId);
model.addAttribute("currentUser", getPrincipal());
return "booking-list";
}
首先,您可能应该在后端执行此操作并只传递过滤列表,但对于 jsp 方法,您可以使用 forEach
。
示例:
<c:forEach items="${bookings}" var="booking">
<c:if test="${booking.userId == currentUserId}">
...
</c:if>
</c:forEach>
编辑:问题已更新
要在后端过滤预订,您可以使用 Stream API
:
List<Booking> bookings = bookingService.getAllBookings().stream()
.filter(b -> b.getUserId() == currentUserId)
.collect(Collectors.toList());
model.addAttribute("bookings", bookings);
编辑 2.0:
实际上,您甚至不应该在 java 中过滤它们。由于您从数据库中获取数据,因此您应该实施 getBookingsForUserId()
并使用 WHERE
子句来过滤它们。