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

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. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
  2. 浪潮成立人工智能部门 为AI提供顶尖计算产品
  3. @query传参_VueRouter之query与params两种传参区别
  4. 第十天:估算活动持续时间,类比估算,参数估算,自下而上估算,三点估算解析表
  5. python 发送邮件connect none_使用python向IP地址发送邮件
  6. 鸿蒙系统被泼冷水,给鸿蒙泼冷水:见不得同行的好,是人间最可恶的蠢和恶
  7. 面向对象设计——七大原则
  8. python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
  9. python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套
  10. 一篇真正教会你开发移动端页面的文章
  11. Android系统中的广播(Broadcast)机制简要介绍和学习计划 .
  12. oracle 负载均衡连接方式常用SQL语句备忘录
  13. 鲁大师原来真的姓鲁呀
  14. Tcp协议socket通信数据包粘包问题分析及解决方案
  15. “计算机组成原理”视频资料(加上全集链接啦)
  16. 精睿ESET_VC52_UPID获取器(8.25更新4.2.2.0)
  17. 香港自由行攻略(自用)
  18. 儿童吹泡泡水简单配方_儿童吹泡泡水简单配方,最简单做泡泡水的办法
  19. 百度地图多点路线规划_期待已久的多地点路线规划功能
  20. c++基础复习(2)

热门文章

  1. 中国光无源器件行业市场研究与投资战略报告(2022版)
  2. qt 侧边栏 Sidebar
  3. 安居客爬虫+分析+回归
  4. 关于Windows10服务中没有SNMP Service问题以及SNMP没有安全选项的问题
  5. 2018_Csrnet: Dilated convolutional neural networks for understanding the highly congested scenes
  6. c语言万年历闹钟程序,C语言万年历的源程序
  7. U盘中的文件夹全变成应用程序格式如何解决?
  8. PFM与PWM的技术总结
  9. 《企业级大数据平台构建:架构与实现》阅读总结
  10. 数据分析平台要点梳理