如何使用 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 子句来过滤它们。