今天在昨天显示新闻详情页的基础上实现评论功能
写评论
在新闻页下方实现写评论的功能,首先要有一个Comment的实体类
@Entity
@Table(name = "t_comment")
public class Comment {
@Id
@GeneratedValue
private Long id;
private String nickname;
private String email;
private String content;
private String avatar;
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
@ManyToOne
private News news;
@OneToMany(mappedBy = "parentComment")
private List<Comment> replyComments = new ArrayList<>();
@ManyToOne
private Comment parentComment;
private boolean adminComment;
public Comment() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public List<Comment> getReplyComments() {
return replyComments;
}
public void setReplyComments(List<Comment> replyComments) {
this.replyComments = replyComments;
}
public Comment getParentComment() {
return parentComment;
}
public void setParentComment(Comment parentComment) {
this.parentComment = parentComment;
}
public boolean isAdminComment() {
return adminComment;
}
public void setAdminComment(boolean adminComment) {
this.adminComment = adminComment;
}
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
@Override
public String toString() {
return "Comment{" +
"id=" + id +
", nickname='" + nickname + '\'' +
", email='" + email + '\'' +
", content='" + content + '\'' +
", avatar='" + avatar + '\'' +
", createTime=" + createTime +
", news=" + news +
", replyComments=" + replyComments +
", parentComment=" + parentComment +
", adminComment=" + adminComment +
'}';
}
}
新闻实体类News中已有了评论列表,在界面直接遍历即可显示出来。
在界面输入评论后,将评论封装成Comment对象传到后端,在后端进行处理
@Controller
public class CommentController {
@Autowired
private ICommentService commentService;
@PostMapping("/comments")
public String save(Comment comment, HttpSession session) {
User user = (User) session.getAttribute("user");
if(user==null){
comment.setAdminComment(false);
}else{
comment.setAdminComment(true);
}
commentService.save(comment);
Long newsId = comment.getNews().getId();
return "redirect:/comments" + newsId;
}
@RequestMapping("/comments/{newsId}")
public String comments(@PathVariable Long newsId, Model model){
List<Comment> comments = commentService.findCommentByNewsId(newsId);
model.addAttribute("comments", comments);
return "news :: commentList";
}
}
在ICommentService实现类中
@Override
public void save(Comment comment) {
if(comment.getParentComment().getId() == -1) comment.setParentComment(null);
commentDao.save(comment);
}
@Override
public List<Comment> findCommentByNewsId(Long newsId) {
Sort sort = Sort.by("createTime");
List<Comment> comments = commentDao.findByNewsIdAndParentCommentNull(newsId,sort);
return null;
}
save方法是Jpa接口中的方法,直接调用就可以持久化到数据库。写完评论后要刷新界面,findCommentByNewsId就可以将评论重新查出。