2012-02-24 11 views
1

Playフレームワークでは、すべてではなくデータベースから特定の数のオブジェクトだけをリストする方法を教えてください。 は、私はちょうどどのようにこのPlay Frameworkテンプレートリストのみトップ5

public class Post extends Model { 
@ManyToOne 
    public User user; 
    public String name; 
    public String description; 
    public String image; 
    public Date created_date; 

    @OneToMany(mappedBy="post", cascade=CascadeType.ALL) 
    public List<Comment> comments; 
    .... 
} 

のようにコメントして@OneToMany関係を持って、このPostクラスがあると私だけのリストのトップテンプレートでの各ポストのための5のコメントのですか?私はこれをやったが、それはあなたがちょうど上記

#{list items:post.comments.subList(0,5), as:'comment'} 
    <p>${comment.comment}</p> 
#{/list}  

サブリストを取得するには、標準のJavaを使用することができますすべてのコメント

#{list items:post.comments, as:'comment'} 
    <p>${comment.comment}</p> 
#{/list}  

おかげ

+0

になり、「グルーヴィー」をタグ付けしました。「playframework」 – sbglasius

答えて

6

は外の配列のインデックスを返します示しもし5つ未満のコメントがある場合には境界があるので、テンプレートにいくつかのロジックを追加するか(下のように)、またはあなたのPostモデルにgetterメソッドを作成して、top5のコメントを取得します。おそらく清潔で好ましいオプションです。

テンプレート内の余分なロジックを使用すると、これはあなたのビューでも多くの論理であることに同意し、お使いのモデルでそれをカプセル化する場合は、次のことを行うことができ

#{list items:post.comments.subList(0, Math.min(5, post.comments.size())), as:'comment'} 
    <p>${comment.comment}</p> 
#{/list}  

ようになります。 ビュー内の余分なロジックが

public List<Comment> getTop5() { 
    return comments.subList(0, Math.min(5, comments.size()); 
} 

のように見えるかもしれません。そして、あなたのコントローラが

#{list items:post.top5, as:'comment'} 
    <p>${comment.comment}</p> 
#{/list} 
+0

で再びタグ付けされた素敵な、この構文を知っていませんでした。 –

+0

このような単純なロジックが動作します。ありがとう! –