B046-cms01-后台搭建 界面修改 分页 GirdManager

news2024/12/30 4:20:15

目录

      • cms
      • 项目介绍
      • Maven
      • 跳转到后台首页
        • 视图解析器
        • 页面和静态资源准备
        • 资源分布
        • controller控制器
      • 跳转到文章展示页面
        • index.JSP
        • ArticleController
        • article.jsp
      • gridManager初体验和显示文章数据
      • 时间和是否启用显示
        • Article
        • article.jsp
      • 展示文章类型
        • ArticleServiceImpl
        • article.jsp
      • 按钮展示
      • 分页
        • 前端补充参数localPage和pageSize
        • PageQuery和ArticleQuery
        • PageBean
        • ArticleServiceImpl
        • ArticleMapper.xml

要做的3个模块,1.轮播图,2.文章展示,浏览次数,3,登录模块

文档,xmind,视频,代码工程,

cms

内容管理系统(Content Management System,CMS),是一种位于WEB前端(Web 服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet网站的信息。

项目介绍

见xmind和视频

Maven

介绍与联系

跳转到后台首页

视图解析器

	<!-- 4.视图解析器:统一处理【webmvc】 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property><!-- 前缀 -->
		<property name="suffix" value=".jsp"></property><!-- 后缀 -->
	</bean>

页面和静态资源准备

/cms01/src/main/WebContent/WEB-INF/views/index.jsp
/cms01/src/main/WebContent/static/system

资源分布

在这里插入图片描述

controller控制器

可经过视图解析器跳转到jsp等页面

/**
 * @Description:后台可跳转的首页
 */
@Controller
@RequestMapping("/system")
public class SystemController {

	/**
	 * @Description:不加@responsebody,要走视图解析器跳转到后台首页
	 */
	@RequestMapping("/index")
	public String index(){
		return "index";
	}
}

跳转到文章展示页面

index.JSP

      		<ul class="app-menu">
	        	<li>
	        		<a class="app-menu__item active" href="/system/article/index">
	        			<i class="app-menu__icon fa fa-dashboard"></i>
	        			<span class="app-menu__label">文章管理</span>
	        		</a>
	        	</li>
      		</ul>

ArticleController

@Controller
@RequestMapping("/system/article")
public class ArticleController {
    
    @Autowired
	private IArticleService service;
    
    /**
	 * @Description:跳转到后台文章展示页
	 */
	@RequestMapping("/index")
	public String index(){
		return "article/article";
	}

article.jsp

/cms01/src/main/WebContent/WEB-INF/views/article/article.jsp

gridManager初体验和显示文章数据

对表格友好的小UI框架

应用:1.工程里引入支持文件,2.复制html和js代码到自己工程里,3.按要求的格式响应数据

<table id='table-demo-ajaxPageCode'></table>
			document.querySelector('#table-demo-ajaxPageCode').GM({
		        gridManagerName: 'demo-ajaxPageCode',	//名字随意
		        ajaxData: '/system/article/findAll',	//改成findAll
		        ajaxType: 'POST',
		        supportAjaxPage: true,		//是否支持分页
		        sizeData: [5,10,15,20],
		        pageSize: 5,
		        currentPageKey: "localPage",
		        pageSizeKey: "pageSize",
		        supportAdjust: false,
		        supportDrag: false,
		        columnData: [
		            {
		            	key: 'title',
		                align: "center",
		                text: '文章标题'
		            },{
		                key: 'type',
		                align: "center",
		                text: '文章类型',
		                template: function(cell, row, index, key){// 模板
		                    return cell.name;
		                }
		            },{
		            	key: 'url',
		                align: "center",
		                text: 'url'
		            },{
		                key: 'clickCount',
		                align: "center",
		                text: '点击量'
		            },{
		                key: 'createDate',
		                align: "center",
		                text: '日期'
		            },{
		            	key: 'enable',
		                align: "center",
		                text: '是否启用',
		                template: function(cell, row, index, key){// 模板
		                	//console.debug(cell) // enable属性对应的值
		                	//console.debug(row) // 一行数据的信息  是一个对象
		                	//console.debug(index) // 索引
		                	//console.debug(key) // key对应的字段
		                    return cell?"启用":"禁用";
		                }
		            },{
		                key: 'id',
		                align: "center",
		                text: '操作 &nbsp;&nbsp;<a style="color:green" href="javascript:;">添加</a>',
		                template: function(cell, row, index, key){// 模板
		                	
		                    return '<a style="color:red" href="javascript:;">删除</a>&nbsp;&nbsp;'+
		                    	   '<a style="color:blue" href="javascript:;">修改</a>';
		                }
		            }
		        ]
		    });

ArticleController

		// 需要totals:15   data: list
		List<Article> list = service.findAll();
		Map<String, Object> map = new HashMap<>();
		// 总条数
		map.put("totals", list.size());
		// 数据
		map.put("data", list);
		return map;

时间和是否启用显示

Article

@Data
public class Article {
	
	//主键id
	private Long id;
	//文章标题
	private String title;
	//文章url地址
	private String url;
	//文章类型ID
	private Long typeId;
	//文章类型
	private ArticleType type;
	//点击次数
	private Integer clickCount = 0;
	//文章内容
	private String content;
	//创建时间
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
	private Date createDate = new Date();
	//默认启用状态
	private Boolean enable;
}

article.jsp

					{
		            	key: 'enable',
		                align: "center",
		                text: '是否启用',
		                template: function(cell, row, index, key){// 模板
		                	//console.debug(cell) // enable属性对应的值
		                	//console.debug(row) // 一行数据的信息  是一个对象
		                	//console.debug(index) // 索引
		                	//console.debug(key) // key对应的字段
		                    return cell?"启用":"禁用";
		                }
		            },

展示文章类型

ArticleServiceImpl

		List<Article> list = mapper.findAll();
		
		for (Article article : list) {
			// 先获取typeId
			Long typeId = article.getTypeId();
			// 根据typeId查询文章类型表
			ArticleType at = typeMapper.findArticleTypeByTypeId(typeId);
			// 把文章类型对象set到article中
			article.setType(at);
		}

article.jsp

					{
		                key: 'type',
		                align: "center",
		                text: '文章类型',
		                template: function(cell, row, index, key){// 模板   
		                    return cell.name;
		                }
		            },

按钮展示

					{
		                key: 'id',
		                align: "center",
		                text: '操作 &nbsp;&nbsp;<a style="color:green" href="javascript:;">添加</a>',
		                template: function(cell, row, index, key){// 模板
		                	
		                    return '<a style="color:red" href="javascript:;">删除</a>&nbsp;&nbsp;'+
		                    	   '<a style="color:blue" href="javascript:;">修改</a>';
		                }
		            }

分页

前端补充参数localPage和pageSize

			document.querySelector('#table-demo-ajaxPageCode').GM({
		        gridManagerName: 'demo-ajaxPageCode',	//名字随意
		        ajaxData: '/system/article/findAll',	//改成findAll
		        ajaxType: 'POST',
		        supportAjaxPage: true,		//是否支持分页
		        sizeData: [5,10,15,20],
		        pageSize: 5,
		        currentPageKey: "localPage",
		        pageSizeKey: "pageSize",
		        supportAdjust: false,
		        supportDrag: false,
		        columnData: [

PageQuery和ArticleQuery

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageQuery {
    // 当前页
	private Integer localPage;	
	// 每页显示条数
	private Integer pageSize;
    
    // 返回的是limit中的第一个参数值
	public Integer getBegin(){
		return (this.localPage-1)*this.pageSize;
	}
/**  
 * @Description:用来添加高级查询参数
 */
public class ArticleQuery extends PageQuery{
	
}

PageBean

@Data
public class PageBean<T> {

	// 总条数
	private Integer totals = 0;						//没有初始化可能会报空指针
	
	// 数据
	private List<T> data = new ArrayList<T>();		//没有初始化可能会报空指针

ArticleServiceImpl

	@Override
	public PageBean<Article> findAll(ArticleQuery aq) {
		
		// 查询总条数
		Integer count = mapper.findCount(aq);
		if(count==0){
			return new PageBean<>();
		}
		
		List<Article> list = mapper.findAll(aq); // 分页之后的
		
		for (Article article : list) {
			// 先获取typeId
			Long typeId = article.getTypeId();
			// 根据typeId查询文章类型表
			ArticleType at = typeMapper.findArticleTypeByTypeId(typeId);
			// 把文章类型对象set到article中
			article.setType(at);
		}
		
		return new PageBean<Article>(count,list);
	}

ArticleMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.itsource.mapper.ArticleMapper">
	<select id="findAll" resultType="article">
		select * from t_article limit #{begin}, #{pageSize}
	</select>	
	
	<!-- Integer findCount(ArticleQuery aq); -->
	<select id="findCount" resultType="int">
		select count(id) from t_article 
	</select>
	
</mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频seo源码部署--LINUX环境

抖音矩阵系统源码/抖音seo矩阵系统/抖音账号矩阵源码/短视频seo源码部署 *基于PHP语言&#xff0c;linux环境&#xff0c;MVC框架进行研发&#xff0c;开源部署 开源性质使得用户可以根据自己的需求对其进行二次开发和定制。然而&#xff0c;对于该软件的部署却是一项非常关键…

Python异步编程之web框架 异步vs同步 Redis并发对比

1|0测试基本信息 主题&#xff1a;比较异步框架和同步框架在RedisIO操作的性能差异python版本&#xff1a;python 3.8数据库&#xff1a;redis 5.0.7压测工具&#xff1a;locustweb框架&#xff1a;同步&#xff1a;flask 异步&#xff1a;starlette请求并发量: 模拟10个用户服…

ubuntu下,安装配置CUDA

一、下载文件。 到下面的官网链接&#xff0c;下载你自己需要的版本。我喜欢11.7 CUDA Toolkit Archive | NVIDIA Developer 二、安装 可能的错误&#xff1a; Failed to verify gcc version. --Linux安装CUDA GCC版本不兼容 sudo sh cuda_xxxxxxxxxxxxxx_linux.run --overr…

【vue+websocket】vue本地链接websocket正常,线上部署websocket 无法加载响应数据【已解决】

1.nginx配置&#xff0c;进行反向代理 location /链接websocket的名称 {proxy_pass http://localhost:websocket端口号/链接websocket的名称;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade"; }2.开放websoc…

Ansible源码学习(一)

一、背景说明 基于Ansible1.1源码学习 二、目录结构 ansible核心目录 ansible ├─bin # 入口命令 │ ├─ansible │ ├─ansible-doc │ ├─ansible-playbook │ ├─ansible-pull ├─lib # 核心代码 │ └─ansible │ ├─callback_plugins …

Netty核心技术六--Netty核心模块组件

1. Bootstrap、ServerBootstrap Bootstrap 意思是引导&#xff0c;一个 Netty 应用通常由一个Bootstrap 开始&#xff0c;主要作用是配置整个 Netty 程序&#xff0c;串联各个组件&#xff0c;Netty 中 Bootstrap 类是客户端程序的启动引导类&#xff0c;ServerBootstrap 是服…

【Linux】天天直接IO?我说停停,不如试试文件缓冲区

系列文章 收录于【Linux】文件系统 专栏 关于文件描述符与文件重定向的相关内容可以移步 文件描述符与重定向操作。 可以到 浅谈文件原理与操作 了解文件操作的系统接口。 目录 系列文章 揭秘C库文件结构体 文件缓冲区 为什么需要文件缓冲区 刷新机制 内核文件缓冲区…

java基础(多线程)-共享资源并发问题以及synchronized解决方案

一、共享资源带来的问题 class ThreadProblem{static int counter 0;public static void testThread(){Thread t1 new Thread(()-> {for (int i 0; i < 5000; i) {counter;}},"t1");Thread t2 new Thread(()-> {for (int i 0; i < 5000; i) {count…

【VMD-LSTM】变分模态分解-长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

主动降噪技术的运用及其展望---【其利天下技术】

降噪耳机想必大家是听说过的&#xff0c;那么什么是降噪耳机呢&#xff1f;降噪耳机的降噪是如何实现的呢&#xff1f; 在很多年前&#xff0c;我想大家肯定认为降噪耳机不就是做得比较帖耳&#xff0c;尽量把声波能量隔离不让进入人耳吗&#xff1f;搞得这么神秘干吗呢&#…

猿辅导基于 EMR StarRocks 的 OLAP 演进之路

摘要&#xff1a;猿辅导大数据平台团队负责人申阳分享了猿辅导基于 StarRocks 的 OLAP 演进之路。主要包括以下几大部分&#xff1a; 数据需求产生OLAP 选型StarRocks 的优势业务场景和技术方案基础建设 Tips&#xff1a;点击「阅读原文」查看原文视频 1► 数据需求产生 猿辅导…

【Linux】进程间通信(1)——匿名管道

文章目录 前言进程间通信的目的进程间通信的发展进程间通信分类管道什么是管道&#xff1f;站在内核角度-管道本质匿名管道pipe函数管道的特点&#xff08;重要&#xff09;用fork来共享管道原理匿名管道的使用步骤管道的读写规则管道的四种场景 如何使用管道进行进程间通信&am…

【Vue3学习】Vuex 状态管理 store

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 安装 npm npm install vuexnext --saveyarn npm install vuexnext --save基本使用 1&#xff09;创建…

Kubernetes初认识

系列文章目录 文章目录 系列文章目录一、Kubernetes初认识1.k8s的特性2.K8S架构3.Kubernetes工作流程 二、K8S创建Pod流程1.详细版2.简单版 总结 一、Kubernetes初认识 1.k8s的特性 弹性伸缩&#xff1a;使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例&…

磁盘调度算法及其应用

导读&#xff1a; 磁盘调度是计算机系统中的重要问题之一。在多个进程同时访问磁盘时&#xff0c;合理的磁盘调度算法可以优化磁盘访问顺序&#xff0c;提高系统性能。本文将介绍磁盘调度算法的基本思想&#xff0c;并通过一个实验来模拟不同调度算法的运行过程。 正文&#…

如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍

背景 近期在搭建英文博客-<e-whisper.com>, 需要对现有的所有中文 Markdown 翻译为英文。 需求如下&#xff1a; 将 Markdown 文件从中文 (zh-CN) 翻译为英文 (en)翻译后要保留 Markdown 的完整格式部分 Markdown block 不需要翻译&#xff0c;如&#xff1a;front-ma…

电脑蓝屏问题

如何使用DISM命令行工具修复Windows 10映像 - 系统极客 (sysgeek.cn) 电脑每周基本都会出现一次蓝屏问题&#xff1a;THREAD_STUCK_IN_DEVICE_DRIVER 售后重装系统&#xff0c;换主板&#xff0c;换硬盘都没有用&#xff0c;实在是人麻了 不知道有没有用&#xff0c;先记录一…

“边玩边赚”的区块链游戏发展前景和趋势

2008年&#xff0c;一个真实的故事。 大学期间&#xff0c;睡在我下铺的兄弟没日没夜地玩一款电脑游戏——《热血江湖》&#xff0c;期末考试和考研都没能阻止他。而最终&#xff0c;是游戏里的一把枪让他改邪归正。因为他把那件装备卖给了一个北京人&#xff0c;价格高达3000…

IT专业相关介绍【活动】

IT专业相关介绍【活动】 前言IT专业相关介绍一、IT专业的就业前景和发展趋势二、了解IT专业的分类和方向三、你对本专业的看法和感想四、本专业对人能力素养的要求五、建议和思考六、计算机思维能力测试 最后 前言 2023-6-17 10:00:29 以下内容源自《【活动】》 仅供学习交流…

Spring-kafka的消费者模型和实现原理

在使用Spring-kafka时,一般都是通过使用@KafkaListener注解的方法来实现消息监听和消费。今天写一下基于这个注解实现的消费端模型和实现的原理。 Kafka消费模型 我们在使用@KafkaListener注解实现消费者时消费者模型是这样的: 每个@KafkaListener注解对应有一个Concurren…