Play Framework Template列表仅排在前5位

时间:2012-02-24 04:57:11

标签: list templates frameworks playframework

在Play框架中,如何从数据库中仅列出一定数量的对象而不是全部。 假设我有这个Post类,它与 @OneToMany 关系就像这样

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;
    ....
}

如何仅为模板中的每个帖子列出前5条评论?我已经这样做了,但它显示了所有评论

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

由于

1 个答案:

答案 0 :(得分:6)

您可以使用标准Java来获取子列表

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

如果少于5个注释,上面将返回一个超出范围的数组索引,因此您可以在模板中添加更多逻辑(如下所示),或者您可以在{{1}中创建一个getter方法获取top5注释的模型,只需调用它(这可能是更清晰和首选的选项。

模板中的额外逻辑看起来像

Post

如果您认为这在您的视图中有太多逻辑,并且想要将其封装在您的模型中,您可以执行以下操作。 您视图中的额外逻辑可能看起来像

#{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());
}