如何使用jsp视图检查某个用户是否已创建数据库项

时间:2017-02-10 16:46:18

标签: java jsp jsp-tags

我有一个名为预订的数据库表,我想尝试但到目前为止无法找到的是用if-else检查,是否有某些用户预订,并显示他们在一张桌子里。

enter image description here

所以我正在寻找类似的东西:

(下面的半伪代码)

<c:when test="${bookings.where(booking.userId == currentUserId) > 0}">
   display table with those items...
</c:when>

所以这会得到该用户制作的所有表项目

如何在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";
    }

1 个答案:

答案 0 :(得分:3)

首先,您可能应该在后端执行此操作并只传递已过滤的列表,但对于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子句对其进行过滤。