我有一个名为预订的数据库表,我想尝试但到目前为止无法找到的是用if-else检查,是否有某些用户预订,并显示他们在一张桌子里。
所以我正在寻找类似的东西:
(下面的半伪代码)
<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";
}
答案 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
子句对其进行过滤。