新闻管理的删除功能+新闻首页+详情页

1.删除功能:

在NewService中增加deleteNew接口:

 void deleteNew(Long id);

在NewServiceImpl中实现:

@Overridepublic void deleteNew(Long id) {newRepository.deleteById(id);}

在NewController中增加delete方法:

@GetMapping("/news/{id}/delete")public String delete(@PathVariable Long id,RedirectAttributes attributes){newService.deleteNew(id);attributes.addFlashAttribute("message","删除成功");return REDIRECT_LIST;}

运行结果:

删除《火星爱地球》这则新闻,提示删除成功:

查看数据库中的表,发现《火星爱地球》已经被删除了:

2.新闻首页

在NewService中添加方法接口,分别用来实现在主页显示新闻列表、主页推荐最新新闻列表以及全局搜索新闻(通过内容和新闻标题)功能:

    //主页显示新闻列表Page<News> listNew(Pageable pageable);//主页推荐最新新闻列表List<News> listRecommendNewTop(Integer size);//全局搜索Page<News> listNew(String query, Pageable pageable);News getAndConvert(Long id);

引入工具类MarkdownUtils:

package com.zr0726.news.util;import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.TableBlock;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
import org.commonmark.node.Link;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.AttributeProvider;
import org.commonmark.renderer.html.AttributeProviderContext;
import org.commonmark.renderer.html.AttributeProviderFactory;
import org.commonmark.renderer.html.HtmlRenderer;import java.util.*;public class MarkdownUtils {/*** markdown格式转换成HTML格式* @param markdown* @return*/public static String markdownToHtml(String markdown) {Parser parser = Parser.builder().build();Node document = parser.parse(markdown);HtmlRenderer renderer = HtmlRenderer.builder().build();return renderer.render(document);}/*** 增加扩展[标题锚点,表格生成]* Markdown转换成HTML* @param markdown* @return*/public static String markdownToHtmlExtensions(String markdown) {//h标题生成idSet<Extension> headingAnchorExtensions = Collections.singleton(HeadingAnchorExtension.create());//转换table的HTMLList<Extension> tableExtension = Arrays.asList(TablesExtension.create());Parser parser = Parser.builder().extensions(tableExtension).build();Node document = parser.parse(markdown);HtmlRenderer renderer = HtmlRenderer.builder().extensions(headingAnchorExtensions).extensions(tableExtension).attributeProviderFactory(new AttributeProviderFactory() {public AttributeProvider create(AttributeProviderContext context) {return new CustomAttributeProvider();}}).build();return renderer.render(document);}/*** 处理标签的属性*/static class CustomAttributeProvider implements AttributeProvider {@Overridepublic void setAttributes(Node node, String tagName, Map<String, String> attributes) {//改变a标签的target属性为_blankif (node instanceof Link) {attributes.put("target", "_blank");}if (node instanceof TableBlock) {attributes.put("class", "ui celled table");}}}public static void main(String[] args) {String table = "| hello | hi   | 哈哈哈   |\n" +"| ----- | ---- | ----- |\n" +"| 斯维尔多  | 士大夫  | f啊    |\n" +"| 阿什顿发  | 非固定杆 | 撒阿什顿发 |\n" +"\n";String a = "[imCoding 爱编程](http://www.lirenmi.cn)";System.out.println(markdownToHtmlExtensions(a));}}

在NewServiceImpl中实现这些方法:

@Overridepublic Page<News> listNew(Pageable pageable) {return newRepository.findAll(pageable);}@Overridepublic List<News> listRecommendNewTop(Integer size) {Sort sort=Sort.by(Sort.Direction.DESC,"updateTime");Pageable pageable= PageRequest.of(0,size,sort);return newRepository.findTop(pageable);}@Overridepublic Page<News> listNew(String query, Pageable pageable) {return newRepository.findByQuery(query, pageable);}@Overridepublic News getAndConvert(Long id) {News news = newRepository.findById(id).orElse(null);if (news==null){System.out.println("该新闻不存在");}News news1 = new News();BeanUtils.copyProperties(news, news1);String content = news1.getContent();news1.setContent(MarkdownUtils.markdownToHtmlExtensions(content));return news1;}

在TypeService中添加方法接口:

List<Type> listTypeTop(Integer size);

在TypeServiceImpl中实现:

@Overridepublic List<Type> listTypeTop(Integer size) {Sort sort= Sort.by(Sort.Direction.DESC,"news.size");Pageable pageable= PageRequest.of(0,size,sort);return typeRepository.findTop(pageable);}

在TagService中添加方法接口:

List<Tag> listTagTop(Integer size);

在TagServiceImpl中实现:

private List<Long> convertToList(String ids){System.out.println("service接收id为:"+ids);List<Long> list=new ArrayList<>();if(!"".equals(ids) && ids!=null){String[] idArray=ids.split(",");for (int i=0;i<idArray.length;i++){list.add(new Long(idArray[i]));}}System.out.println("Service中处理完成后的id list:"+list);return list;}

在IndexController中:

package com.zr0726.news.web;import com.zr0726.news.po.Type;
import com.zr0726.news.po.User;
import com.zr0726.news.service.NewService;
import com.zr0726.news.service.TagService;
import com.zr0726.news.service.TypeService;
import com.zr0726.news.service.UserService;
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.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.servlet.http.HttpSession;@Controller
public class indexController {@Autowiredprivate TypeService typeService;@Autowiredprivate TagService tagService;@Autowiredprivate NewService newService;@GetMapping("/")public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable, Model model){model.addAttribute("page",newService.listNew(pageable));model.addAttribute("types",typeService.listTypeTop(3));model.addAttribute("tags",tagService.listTagTop(3));model.addAttribute("recommendNews",newService.listRecommendNewTop(3));return "index";}@PostMapping("/search")public String search(@PageableDefault(size = 3, sort = {"updateTime"}, direction = Sort.Direction.DESC) Pageable pageable,@RequestParam String query, Model model){model.addAttribute("page", newService.listNew("%" + query + "%", pageable));model.addAttribute("query", query);return "search";}@RequestMapping("/news/{id}")public String news(@PathVariable Long id, Model model){//        model.addAttribute("news",newService.getNew(id));model.addAttribute("news", newService.getAndConvert(id));return "new";}}

运行结果:
打开首页,左侧从上而下分别是分类展示、标签展示、最新推荐展示,右边是新闻列表:

在左上角的搜索框中可以对新闻进行全局搜索,可以搜索标题,也可以搜索新闻内容(非封面的介绍,而是新闻主体内容):

点开一片篇新闻,可以转到新闻详情页:

新闻管理的删除功能+新闻首页+详情页相关推荐

  1. 互联网早报:淘客APP开放新功能 增加定制详情页及私域购物车...

    行业热点 1.淘客APP开放新功能 增加定制详情页及私域购物车: 2.荣耀俱乐部 App 即将上线:荣耀产品相关内容.活动随后迁移: 3."高途课堂"于近日开始无偿接收优胜教育旗下 ...

  2. php ueditor 去掉在线管理,UEditor 添加在线管理图片删除功能 (转载)

    第一,需要添加一个 php 文件来实现删除功能,文件添加到: ueditor\php\action_delete.php 代码内容: /*--------------------------- * a ...

  3. SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)

    目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...

  4. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能

    文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...

  5. music功能 vue_vue_music:歌手详情页

    在singer.vue中,点击某一歌手,根据路由跳转到singer-detail.vue 在vue-muscie:singer.vue页面的5.数据序列化后传入list-vue中相关逻辑 select ...

  6. 基于SSM架构的新闻管理系统设计与实现论文

    标题基于SSM架构的新闻管理系统设计与实现 摘 要 当代社会发展迅速,电脑和网络已经是人们日常生活中必不可或缺的收取信息的工具,起到了至关重要的作用,而随着网络与计算机的发展,网站行业也迅速发展起来, ...

  7. 热点新闻管理系统设计与实现

     其他项目,点击作者主页  目录 1 系统简介 2 系统相关技术 2.1 Java概述 2.2 IDEA概述 2.3JDK概述 2.4 MySQL 2.5 SSM框架 3 需求分析 3.1需求概述 3 ...

  8. Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...

  9. 若依框架的菜单管理中增加详情页

    Ruoyi 框架生成代码时,各种数据操作都放在一个 dialog 弹出框中,而且只有编辑,没有查看--这很不方便.很多时候我们需要个详情页(只读),对于复杂实体在新建时,那个dialog中的表单也实在 ...

最新文章

  1. 活动报名|“悟道之巅:AI创新应用大赛”发布会——体验未来技术,赢取百万奖金...
  2. FFmpegMediaMetadataRetriever-native.aar
  3. html fond 怎么居中,BeautifulSoup标签定位方法总结
  4. MySql中delimiter
  5. 2018.3.24 struct
  6. 【渝粤教育】广东开放大学 国际金融 形成性考核 (48)
  7. ES6之Module 的加载实现(2)
  8. linux 命令 语法,linux常用命令及语法
  9. DIY—USB学习板设计以及驱动开发
  10. 用递归将嵌套的JSON对象遍历出来,转为二维数组
  11. 贵州出台首部大数据地方法规 数据开放引入负面清单
  12. python开发环境一般用哪个_python开发环境哪个好用?如何搭建?
  13. B key-M key-BM key
  14. 【电子书制作软件哪个好】云展网教程 | 搜索功能:搜索杂志内文字可高亮
  15. 示波器的使用和李萨如图形
  16. Qt QLabel详解
  17. 体重测试仪软件,一键校准身高体重测量仪
  18. 档案管理制度计算机管理制度,计算机管理档案制度
  19. NMOS管和PMOS管开关控制电路原理及应用
  20. 个人游戏经历及游戏体验(解谜向)

热门文章

  1. day_3:z分数、正态分布和概率
  2. 【腾讯Bugly干货分享】打造“微信小程序”组件化开发框架
  3. mysql高可用——MHA详细部署过程
  4. 知乎创始人周源:实时问答的知乎Live如何变现?
  5. Win CE5.0背光驱动
  6. iphone5刷机教程
  7. 软件实训之智慧停车需要解决什么痛点和难点
  8. Codeforces 378C
  9. 关于win10系统重置后出现鼠标右键桌面一直转圈问题的解决办法
  10. ural 1998 The old Padawan (模拟+二分)