评论+分类页面+标签页面
2020-08-02 21:29
120 查看
文章目录
一、评论
1.建立评论实体类,注意评论包含新闻评论以及评论的评论,会不端嵌套,直到直接在新闻下的评论
@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 creatTime) { this.createTime = creatTime; } 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 + '\'' + ", creatTime=" + createTime + ", news=" + news + ", replyComment=" + replyComments + ", parentComment=" + parentComment + ", adminComment=" + adminComment + '}'; } }
2.建立CommentRepository接口
import java.util.List; public interface CommentRepository extends JpaRepository<Comment,Long> { List<Comment> findByNewsIdAndParentCommentNull(Long newId, Sort sort); }
3.建立service接口及Impl实现接口
接口:
public interface CommentService { List<Comment> listCommentByNewId(Long newId); Comment saveComment(Comment comment); }
实现:
@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> commentView = new ArrayList<>(); for(Comment comment:comments){ Comment c = new Comment(); BeanUtils.copyProperties(comment,c); commentView.add(c); } //合并评论的各层子代到第一级子代集合中 combineChildren(commentView); return commentView; } private void combineChildren(List<Comment> comments){ for(Comment comment:comments){ List<Comment> replys1 = comment.getReplyComments(); for(Comment reply1:replys1){ //循环迭代,找出子代 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); } }
4.建立controller类
@Controller public class CommentController { @Autowired private CommentService commentService; @Autowired private NewService newService; private String avatar = "http://www.sastind.gov.cn/n112/n117/c6809892/part/6784526.jpg"; @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); System.out.println("555555"); // System.out.println(commentService.saveComment(comment)); return "redirect:/comments/"+newId; } }
二、分类页面
1.建立TypeShowController类
@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"; } }
三、标签页面
1.建立TagShowController类
@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(); } model.addAttribute("tags",tags); model.addAttribute("page",newService.listNew(id,pageable)); model.addAttribute("activeTagId",id); return "tags"; } }
四、运行结果
1.评论
2.分类
3.标签
相关文章推荐
- 0731_评论+分类页面+标签页面
- C++单例模式 标签: c++null设计模式多线程delete数据库 2010-07-29 10:08 10889人阅读 评论(3) 收藏 举报 分类: 设计模式(1) C/C++(43)
- wordpress修改固定链接之后 无法访问的解决办法 标签: WordPress 2015-09-24 14:09 223人阅读 评论(0) 收藏 举报 分类: WordPress(6) 本地同
- spring boot评论+分类页面+标签页面
- WordPress页面,文章,分类等的条件判断的标签集合
- C++实现快速排序(源代码) 标签: c++算法systemc 2011-11-09 22:01 75011人阅读 评论(11) 收藏 举报 分类: Algorithm(1) C/C++(13
- Django学习笔记三:页面侧边栏最新文章,文章归档,分类,标签云的实现
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法 标签: mfc编译器编程c 2011-08-18 22:48 199753人阅读 评论(10) 收藏 举报 分类: Debug
- C++成员变量的初始化顺序 标签: C++成员变量初始化顺序 2017-02-22 23:44 101人阅读 评论(0) 收藏 举报 分类: C++程序设计浅尝(46) 原文地址:http://w
- Spring Boot 完成首页的分类与标签页面,实现跳转拦截
- WordPress页面、文章、分类等的条件判断的标签集合
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接) 标签: hibernateentity 2016-10-11 16:28 1635人阅读 评论(0) 收藏 举报 分类
- RxJava Android(RxAndroid) 开发全家桶 标签: RxAndroid 2016-08-03 23:38 4993人阅读 评论(0) 收藏 举报 分类: Android开发(1
- Android自定义控件系列二:自定义开关按钮(一) 标签: Android自定义控件Java开关按钮自定义组件 2014-11-03 10:55 2735人阅读 评论(6) 收藏 举报 分类: J
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式 标签: tomcat 2016-09-06 11:28 2910人阅读 评论(0) 收藏 举报 分类: tomca
- Java8系列之重新认识HashMap 2016/06/27 | 分类: 基础技术 | 9 条评论 | 标签: HashMap, java8 分享到: 67 原文出处: 前利 简介 Java为数
- tableView等滚动视图滚动时收缩上下导航栏与标签栏 分类: ios技术 2015-04-27 16:59 237人阅读 评论(0) 收藏
- iOS大文件分片上传和断点续传 标签: iOS大文件分片断点续传获取视频获取图片 2016-05-17 15:52 4881人阅读 评论(8) 收藏 举报 分类: 技术—iOS 版权声明:本文为博
- Android使用两个Activity页面切换… 分类: Android开发 2014-05-30 10:55 65人阅读 评论(0) 收藏
- android屏幕页面实现滚动,页面跳… 分类: Android开发 2014-05-30 10:58 58人阅读 评论(0) 收藏