2017-02-10 13 views
1

私は予約と呼ばれるデータベーステーブルを持っていますが、これまで見つからなかったのはif-elseでチェックすることです特定のユーザによって行われた予約であり、それらをテーブルに表示する。特定のユーザーがjspビューを使用してデータベース項目を作成したかどうかを確認する方法

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"; 
    } 
+0

完全なバックエンドコードplzを送信してください。予約とは何ですか?なぜここでステートメント? – Loc

+0

@Locバックエンドを使いたいとは思わないが、私はjspビューページでこれをやりたがっています。もしユーザーが予約を表示していれば、それ以外はメッセージを表示してください。 – john

答えて

3

まず:項目を表示しても問題ありませんが、私は、少なくとも私自身:)

EDITバックエンド部分にそれを行うことができますバックエンドでフィルタリングされたリストを渡すだけですが、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句を使用してフィルタリングする必要があります。

+0

どうしたらコントローラでフィルタリングできますか?私は質問のリストのバックエンドの部分を投稿します。 – john

+0

助けてくれてありがとう。 – john

+0

実際、私はちょうど啓蒙され、編集2.0で答えを更新しました;) – qwerty1423

関連する問題