Play Framework Шаблон списка только топ 5 - PullRequest
1 голос
/ 24 февраля 2012

В Play Framework, как мне перечислить только определенное количество объектов из базы данных вместо всех.Предположим, что у меня есть класс 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 Ответ

6 голосов
/ 24 февраля 2012

Вы можете просто использовать стандартную Java для получения подсписка

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

Вышеприведенное вернет индекс массива вне границ, если будет менее 5 комментариев, так что вы можете либо добавить больше логики в шаблон (как показано ниже), либо создать метод получения в вашем Post модель, которая получает топ-5 комментариев, и просто вызовите ее вместо этого (что, вероятно, является более чистым и предпочтительным вариантом.

Дополнительная логика в шаблоне будет выглядеть как

#{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}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...