新闻管理的删除功能+新闻首页+详情页
新闻管理的删除功能+新闻首页+详情页
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";}}
运行结果:
打开首页,左侧从上而下分别是分类展示、标签展示、最新推荐展示,右边是新闻列表:
在左上角的搜索框中可以对新闻进行全局搜索,可以搜索标题,也可以搜索新闻内容(非封面的介绍,而是新闻主体内容):
点开一片篇新闻,可以转到新闻详情页:
新闻管理的删除功能+新闻首页+详情页相关推荐
- 互联网早报:淘客APP开放新功能 增加定制详情页及私域购物车...
行业热点 1.淘客APP开放新功能 增加定制详情页及私域购物车: 2.荣耀俱乐部 App 即将上线:荣耀产品相关内容.活动随后迁移: 3."高途课堂"于近日开始无偿接收优胜教育旗下 ...
- php ueditor 去掉在线管理,UEditor 添加在线管理图片删除功能 (转载)
第一,需要添加一个 php 文件来实现删除功能,文件添加到: ueditor\php\action_delete.php 代码内容: /*--------------------------- * a ...
- SpringBoot--网上商城项目(自定义的参数解析器、购物车后台前台功能、商品详情页)
目录 一.自定义的参数解析器 关于Mybatis-plus时间字段代码生成问题 报错信息:Caused by: java.lang.IllegalStateException: No typehand ...
- 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”九、整合阿里云视频播放器、课程评论功能、讲师详情页、课程详情页、检索功能、课程和讲师列表功能
文章目录 一.讲师 1.分页查询接口(后端) 1.controller 2.service 3.测试 2.分页显示讲师(前端) 3.讲师详情页(后端) 1.controller 2.测试 4.讲师详情 ...
- music功能 vue_vue_music:歌手详情页
在singer.vue中,点击某一歌手,根据路由跳转到singer-detail.vue 在vue-muscie:singer.vue页面的5.数据序列化后传入list-vue中相关逻辑 select ...
- 基于SSM架构的新闻管理系统设计与实现论文
标题基于SSM架构的新闻管理系统设计与实现 摘 要 当代社会发展迅速,电脑和网络已经是人们日常生活中必不可或缺的收取信息的工具,起到了至关重要的作用,而随着网络与计算机的发展,网站行业也迅速发展起来, ...
- 热点新闻管理系统设计与实现
其他项目,点击作者主页 目录 1 系统简介 2 系统相关技术 2.1 Java概述 2.2 IDEA概述 2.3JDK概述 2.4 MySQL 2.5 SSM框架 3 需求分析 3.1需求概述 3 ...
- Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目 录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...
- 若依框架的菜单管理中增加详情页
Ruoyi 框架生成代码时,各种数据操作都放在一个 dialog 弹出框中,而且只有编辑,没有查看--这很不方便.很多时候我们需要个详情页(只读),对于复杂实体在新建时,那个dialog中的表单也实在 ...
最新文章
- 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
- 浪潮成立人工智能部门 为AI提供顶尖计算产品
- @query传参_VueRouter之query与params两种传参区别
- 第十天:估算活动持续时间,类比估算,参数估算,自下而上估算,三点估算解析表
- python 发送邮件connect none_使用python向IP地址发送邮件
- 鸿蒙系统被泼冷水,给鸿蒙泼冷水:见不得同行的好,是人间最可恶的蠢和恶
- 面向对象设计——七大原则
- python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
- python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套
- 一篇真正教会你开发移动端页面的文章
- Android系统中的广播(Broadcast)机制简要介绍和学习计划 .
- oracle 负载均衡连接方式常用SQL语句备忘录
- 鲁大师原来真的姓鲁呀
- Tcp协议socket通信数据包粘包问题分析及解决方案
- “计算机组成原理”视频资料(加上全集链接啦)
- 精睿ESET_VC52_UPID获取器(8.25更新4.2.2.0)
- 香港自由行攻略(自用)
- 儿童吹泡泡水简单配方_儿童吹泡泡水简单配方,最简单做泡泡水的办法
- 百度地图多点路线规划_期待已久的多地点路线规划功能
- c++基础复习(2)
热门文章
- 中国光无源器件行业市场研究与投资战略报告(2022版)
- qt 侧边栏 Sidebar
- 安居客爬虫+分析+回归
- 关于Windows10服务中没有SNMP Service问题以及SNMP没有安全选项的问题
- 2018_Csrnet: Dilated convolutional neural networks for understanding the highly congested scenes
- c语言万年历闹钟程序,C语言万年历的源程序
- U盘中的文件夹全变成应用程序格式如何解决?
- PFM与PWM的技术总结
- 《企业级大数据平台构建:架构与实现》阅读总结
- 数据分析平台要点梳理