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