评论
controller部分
@GetMapping("/comments/{newId}")
public String comments(@PathVariable Long newId, Model model){
model.addAttribute("comments",commentService.listCommentByNewId(newId));
return "new::commentList";
}
@PostMapping("/comments")
public String post(Comment comment, HttpSession session){
Long newId = comment.getNews().getId();
comment.setNews(newService.getNew(newId));
User user = (User)session.getAttribute("user");
if(user!=null){
comment.setAdminComment(true);
comment.setAvatar(avatar);
}else {
comment.setAvatar(avatar);
}
commentService.saveComment(comment);
return "redirect:/comments/"+newId;
}
接口实现部分
@Override
public List<Comment> listCommentByNewId(Long newId) {
Sort sort = Sort.by("createTime");
List<Comment> comments = commentRepository.findByNewsIdAndParentCommentNull(newId,sort);
return eachComment(comments);
}
private List<Comment> eachComment(List<Comment> comments){
List<Comment> commentsView = new ArrayList<>();
for(Comment comment:comments){
Comment c = new Comment();
BeanUtils.copyProperties(comment,c);
commentsView.add(c);
}
//合并评论的各层子集到第一层子集中
combineChildren(commentsView);
return commentsView;
}
private void combineChildren(List<Comment> comments){
for(Comment comment:comments){
List<Comment> replys1 = comment.getReplyComments();
for(Comment reply1:replys1){
//循环迭代,找出子代,存放在临时tempReplys中
recursively(reply1);
}
comment.setReplyComments(tempReplys);
//清除临时缓存区
tempReplys = new ArrayList<>();
}
}
private List<Comment> tempReplys = new ArrayList<>();
private void recursively(Comment comment){
tempReplys.add(comment); //顶节点添加到临时存放区
if(comment.getReplyComments().size()>0){
List<Comment> replys = comment.getReplyComments();
for(Comment reply: replys){
tempReplys.add(reply);
if(reply.getReplyComments().size()>0){
recursively(reply);
}
}
}
}
@Override
public Comment saveComment(Comment comment) {
Long parentCommentId = comment.getParentComment().getId();
if(parentCommentId != -1){
comment.setParentComment(commentRepository.findById(parentCommentId).orElse(null));
}
else {
comment.setParentComment(null);
}
comment.setCreateTime(new Date());
return commentRepository.save(comment);
}
分类
@GetMapping("/types/{id}")
public String types(@PageableDefault(size = 8,sort = {"updateTime"},direction = Sort.Direction.DESC)
Pageable pageable, @PathVariable Long id, Model model){
List<Type> types = typeService.listTypeTop(20);
if(id==-1){
id = types.get(0).getId();
}
NewQuery newQuery = new NewQuery();
newQuery.setTypeId(id);
model.addAttribute("types",types);
model.addAttribute("page",newService.listNew(pageable,newQuery));
model.addAttribute("activeTypeId",id);
return "types";
}
标签
@GetMapping("/tags/{id}")
public String tags(@PageableDefault(size=8,sort = {"updateTime"},direction = Sort.Direction.DESC) Pageable pageable,
@PathVariable Long id, Model model){
List<Tag> tags=tagService.listTagTop(20);
if(id==-1){
id=tags.get(0).getId();
}
NewQuery newQuery=new NewQuery();
newQuery.setTypeId(id);
model.addAttribute("tags",tags);
model.addAttribute("page",newService.listNew(id,pageable));
model.addAttribute("activeTagId",id);
return "tags";
}
结果
点击回复可以在别人的评论下面评论
分类:展示对应分类下面的新闻
标签:展示对应标签下面的新闻