项目迭代之评论、分类、标签页面实现
2020-07-31 16:18
141 查看
项目迭代之评论、分类、标签页面实现
实体类更新
一、Comment(新增)
package com.whut.news.po; import javax.persistence.*; import java.util.ArrayList; import java.util.Date; import java.util.List; @Entity @Table(name = "t_comment") public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 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 News getNews() { return news; } public void setNews(News news) { this.news = news; } 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; } @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 + '}'; } }
服务层
一、CommentRepository
package com.whut.news.dao; import com.whut.news.po.Comment; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface CommentRepository extends JpaRepository<Comment,Long> { List<Comment> findByNewsIdAndParentCommentNull(Long newId, Sort sort); }
二、CommentService
package com.whut.news.service; import com.whut.news.po.Comment; import java.util.List; public interface CommentService { List<Comment> listCommentByNewId(Long newId); Comment saveComment(Comment comment); }
三、CommentServiceImpl
package com.whut.news.service.impl; import com.sun.org.apache.regexp.internal.RE; import com.whut.news.dao.CommentRepository; import com.whut.news.po.Comment; import com.whut.news.service.CommentService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class CommentServiceImpl implements CommentService { @Autowired private CommentRepository commentRepository; @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); } }
控制层
一、CommentCotroller
package com.whut.news.web; import com.whut.news.po.Comment; import com.whut.news.po.User; import com.whut.news.service.CommentService; import com.whut.news.service.NewService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import javax.servlet.http.HttpSession; @Controller public class CommentController { @Autowired private CommentService commentService; @Autowired private NewService newService; private String avatar = "https://tse4-mm.cn.bing.net/th/id/OIP.yweHqHF6IQl7i5yusCTwQQHaHa?pid=Api&rs=1"; @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); } commentService.saveComment(comment); // System.out.println(commentService.saveComment(comment)); return "redirect:/comments/"+newId; } }
二、TypeShowController
package com.whut.news.web; import com.whut.news.po.Type; import com.whut.news.service.NewService; import com.whut.news.service.TypeService; import com.whut.news.vo.NewQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @Controller public class TypeShowController { @Autowired private TypeService typeService; @Autowired private NewService newService; @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"; } }
三、ShowTagController
package com.whut.news.web; import com.whut.news.po.Tag; import com.whut.news.service.NewService; import com.whut.news.service.TagService; import com.whut.news.vo.NewQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @Controller public class TagShowController { @Autowired private NewService newService; @Autowired private TagService tagService; @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"; } }
相关文章推荐
- 中软国际实训十一:SpringBoot项目——评论+分类、标签页面实现
- Springboot项目-评论+分类页面+标签页面
- 【中软实训】11.评论+分类+标签页面实现
- android屏幕页面实现滚动,页面跳… 分类: Android开发 2014-05-30 10:58 58人阅读 评论(0) 收藏
- Django学习笔记三:页面侧边栏最新文章,文章归档,分类,标签云的实现
- QQ登陆页面实现 分类: ios开发 2014-12-12 21:06 150人阅读 评论(0) 收藏
- 奇幻网站实现点击分类~标签显示文章详情和多级评论功能
- 评论+分类页面+标签页面
- Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说
- C++实现快速排序(源代码) 标签: c++算法systemc 2011-11-09 22:01 75011人阅读 评论(11) 收藏 举报 分类: Algorithm(1) C/C++(13
- Spring Boot 完成首页的分类与标签页面,实现跳转拦截
- 前端学习笔记之vue项目有关滚动标签实现相应页面更新的问题
- 0731_评论+分类页面+标签页面
- 用Apache Ivy实现项目里的依赖管理 分类: C_OHTERS 2014-07-06 18:11 564人阅读 评论(0) 收藏
- MyEclipse修改页面模板(JSP和HTML等) 分类: WEB项目应用 2010-01-31 00:03 698人阅读 评论(1) 收藏
- Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享 分类: 系统架构 Linux 2015-06-09 21:50 168人阅读 评论(0) 收藏
- ios 同步Get请求的实现 分类: ios开发 2015-01-30 17:36 362人阅读 评论(0) 收藏
- C解释器Picoc阅读 (2011-12-21 18:06:11)转载▼ 标签: c 解释器 picoc 分类: 编程 Picoc是google开源代码项目中看到的一个项目,其初衷貌似是要做一个在小的
- 利用YaHoo YUI实现Javascript CSS 压缩 分类: C# 2014-07-13 19:07 371人阅读 评论(0) 收藏
- OC基础:内存(进阶):retain.copy.assign的实现原理 分类: ios学习 OC 2015-06-26 17:36 58人阅读 评论(0) 收藏