B049-cms04-浏览次数 富文本 轮播图 上传

news/2024/11/27 6:16:34/

目录

      • 浏览次数
        • 页面加载发送请求
        • 后台处理请求
        • 前台展示
      • 展示日期
      • 富文本编辑
        • static下引入富文本资源文件夹
        • 模态框文本域替换成如下内容
        • 底部引入相关文件
        • 调整模态框样式
        • 把富文本选项移到模态框前面
        • 上传表情或图片等富文本
        • 添加操作手动清空富文本编辑器内容
        • 修改操作手动回显富文本编辑器内容
      • 轮播图
        • 侧边菜单栏添加轮播图管理
        • 轮播图跳转和页面准备
        • 查询所有后端实现
        • 页面展示轮播图
        • 高级查询,图片后台展示
      • 上传图片
        • 修改添加或修改模态框
        • 配置上传解析器
        • 后端代码
        • tips:文件上传功能

浏览次数

文章页面浏览次数的实现

页面加载发送请求

	<script type="text/javascript">$(function(){// 页面加载// 地址栏路径var href = location.href;// alert(href);  http://localhost/static/template/1611537130388.html// 获取urlvar url = href.substring(href.lastIndexOf("/")+1);// alert(url)$.ajax({type: "post",url: "/home/updateClickCountByUrl",   //后台路径data: {"url":url},dataType: "json",success: function(msg){console.debug(msg.clickCount);}}); })</script>	

后台处理请求

HomeController

	/*** @Description:根据url更新点击量*/@RequestMapping("/updateClickCountByUrl")@ResponseBodypublic Article updateClickCountByUrl(String url){return service.updateClickCountByUrl(url);}

ArticleServiceImpl

	@Overridepublic Article updateClickCountByUrl(String url) {// 根据url查询数据   articleArticle article = mapper.findArticleByUrl(url);// 获取点击量Integer count = article.getClickCount();// 自增一再set回去article.setClickCount(count+1);mapper.update(article);return article;}

ArticleMapper

	<!-- Article findArticleByUrl(String url); --><select id="findArticleByUrl" resultType="article">select * from t_article where url=#{url}</select>

前台展示

<span><span b>分类: </span>视频教程</span><span><span b>浏览: </span><span id="clickCount">0</span></span>
	<script type="text/javascript">$(function(){// 页面加载// 地址栏路径var href = location.href;// alert(href);  http://localhost/static/template/1611537130388.html// 获取urlvar url = href.substring(href.lastIndexOf("/")+1);// alert(url)$.ajax({type: "post",url: "/home/updateClickCountByUrl",data: {"url":url},dataType: "json",success: function(msg){//console.debug(msg.clickCount);$("#clickCount").html(msg.clickCount);}}); })</script>

展示日期

数据由添加操作生成页面的时候Article对象里的数据进到模板里来生成

<div class="info"><span><span b>日期: </span><span>${createDate ?date}</span></span><span><span b>浏览: </span><span id="clickCount">0</span></span>
</div>

富文本编辑

图片与视频等非文本多媒体内容一般放入本地工程即本地服务器或云端三方服务器中
案例参考:http://fex.baidu.com/ueditor/
在这里插入图片描述

static下引入富文本资源文件夹

模态框文本域替换成如下内容

<!-- 加载编辑器的容器 -->
<script id="container" name="content" type="text/plain">这里写你的初始化内容
</script>

底部引入相关文件

配置文件,编辑器源码文件,和实例化编辑器,修改路径,调整z轴显示可选表情

	<!-- 配置文件 --><script type="text/javascript" src="/static/ueditor/ueditor.config.js">			</script><!-- 编辑器源码文件 --><script type="text/javascript" src="/static/ueditor/ueditor.all.js"></script><!-- 实例化编辑器 --><script type="text/javascript">var ue = UE.getEditor('container');</script>

调整模态框样式

大模态框:来自bootstarp官网
修改文字和框体之间空隙:col-md-?

把富文本选项移到模态框前面

加上大数字的z轴

	    <!-- 实例化编辑器 --><script type="text/javascript">var ue = UE.getEditor('container',{zIndex: 8888});</script>

上传表情或图片等富文本

默认保存文件到项目中,地址保存进数据库。可在config.json中修改上传参数。

添加操作手动清空富文本编辑器内容

注意重启服务后清空缓存

		    // 添加操作  绑定添加按钮  事件委托$("body").on("click","#addBtn",function(){// 清空form中数据$("#saveForm").clearForm();// 手动清空富文本编辑器内容var ue = UE.getEditor('container');		          		           ue.ready(function(){ue.setContent('');  //赋值给UEditor});// 手动清空隐藏域id$("#saveId").val("");// 弹出模态框$("#saveModal").modal("show");})

修改操作手动回显富文本编辑器内容

注意重启服务后清空缓存

		    // 修改操作  绑定修改按钮  事件委托$("body").on("click","a[data-row]",function(){// 清空form中数据$("#saveForm").clearForm();	// clearForm()、ajaxSubmit()都是jquery-form.js插件的方法// 数据回显  获取数据var row = $(this).data("row");// console.debug(row);// 数据回显	插件提供的方法$("#saveForm").setForm(row);// 手动回显富文本编辑器内容var ue = UE.getEditor('container');		          		           ue.ready(function(){ue.setContent(row.content);  //赋值给UEditor});// 弹出模态框$("#saveModal").modal("show");})

轮播图

侧边菜单栏添加轮播图管理

index.jsp的leftMenu.jsp添加轮播图

<div class="app-sidebar__overlay" data-toggle="sidebar"></div><aside class="app-sidebar"><div class="app-sidebar__user">	<img class="app-sidebar__user-avatar" width="48px" height="48px" src="/static/system/images/m1.jpg" alt="User Image"><div><p class="app-sidebar__user-name">John Doe</p></div></div><ul class="app-menu"><li><a class="app-menu__item" href="/system/article/index"><!-- 通过controller跳转到/WEB-INF/views/article/article.jsp --><i class="app-menu__icon fa fa-dashboard"></i><span class="app-menu__label">文章管理</span></a></li><li><a class="app-menu__item" href="/system/slide/index"><i class="app-menu__icon fa fa-dashboard"></i><span class="app-menu__label">轮播图管理</span></a></li></ul></aside>

轮播图跳转和页面准备

新建slideController

@Controller
@RequestMapping("/system/slide")
public class SlideController {@RequestMapping("/index")public String index(){					return "slide/slide";}
}

复制Article文件夹和Article.jsp文件到同级目录并改名slide和slide.jsp,修改slide.js引入路径

复制Article文件夹和Article.js文件到同级目录并改名slide和slide.js,slide.js中修改findAll路径

查询所有后端实现

slide.js

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

后端代码

页面展示轮播图

document.querySelector('#table-demo-ajaxPageCode').GM({gridManagerName: 'demo-ajaxPageCode',	//名字随意ajaxData: '/system/slide/findAll',	//改成findAllajaxType: 'POST',supportAjaxPage: true,		//是否支持分页sizeData: [5,10,15,20],pageSize: 5,currentPageKey: "localPage",pageSizeKey: "pageSize",supportAdjust: false,supportDrag: false,columnData: [{key: 'name',align: "center",text: '图片名称'},{key: 'path',align: "center",text: 'path',},{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" id="addBtn" href="javascript:;">添加</a>',template: function(cell, row, index, key){// 模板// row是一个json对象,要转成stringvar str = JSON.stringify(row);//  console.debug(str);// data:  数据必须是标准格式  {'id':10,'name':'zs'}return '<a style="color:red" data-id="'+cell+'" href="javascript:;">删除</a>&nbsp;&nbsp;'+"<a style='color:blue' data-row='"+str+"' href='javascript:;'>修改</a>";}}]});

高级查询,图片后台展示

jsp,js,query,mapper,

SlideQuery

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SlideQuery extends PageQuery{private String name;private Boolean enable;
}

mapper

<mapper namespace="cn.itsource.mapper.SlideMapper"><select id="findAll" resultType="Slide">select * from t_slide<include refid="query"></include>limit #{begin}, #{pageSize}</select>	<!-- Integer findCount(ArticleQuery aq); --><select id="findCount" resultType="int">select count(id) from t_slide<include refid="query"></include></select>	<!-- void add(Slide slide); --><insert id="add">insert into t_slide(name,path,createDate,enable) values(#{name},#{path},#{createDate},#{enable})</insert><!-- sql片段 --><sql id="query"><where><if test="enable!=null">and enable = #{enable}</if><if test="name!=null and ''!=name.trim()">and name like concat('%',trim(#{name}),'%' )</if></where> </sql>	
</mapper>

图片后台展示

					{key: 'path',align: "center",text: 'path',template: function(cell, row, index, key){// 模板return "<img width='50px' src='"+cell+"'>";}},

创建upload文件夹,放入图片,数据库引用路径,前台展示引用图片

tips:删除富文本

上传图片

文件通过上传解析器和IO流代码上传到工程里,信息保存进数据库。

修改添加或修改模态框

<!-- 添加或者修改的模态框 -->
<div class="modal fade bs-example-modal-lg" id="saveModal"><div class="modal-dialog modal-lg"><div class="modal-content message_align"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button></div><div class="modal-body"><form action="/system/slide/save" method="post" class="form-horizontal" id="saveForm"><input type="hidden" name="id" id="saveId"><div class="form-group row"><label for="photo" class="control-label col-md-2">上传图片</label><div class="col-md-10"><input class="form-control" type="file" name="photo"></div></div><div class="form-group row"><label for="enable" class="control-label col-md-2" >是否启用</label><div class="col-md-10"><div class="form-check"><label class="form-check-label"><input class="form-check-input" type="radio" checked="checked" id="enable" name="enable" value="1">启用</label></div><div class="form-check"><label class="form-check-label"><input class="form-check-input" type="radio" name="enable" value="0">禁用</label></div></div></div></form></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">取消</button><a href='javascript:void(0);' id="saveButton" class="btn btn-success" >确定</a></div></div></div>
</div>

配置上传解析器

applicationContext-mvc.xml

	<!-- 上传解析器 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置上传文件的最大尺寸为1MB --><property name="maxUploadSize"><!-- spring el写法:1MB --><value>#{1024*1024*20}</value></property><!-- 效果同上 --><!-- <property name="maxUploadSize" value="1048576" /> --></bean>

后端代码

SlideController

	@RequestMapping("/save")@ResponseBodypublic AjaxResult save(Slide slide,HttpServletRequest req,MultipartFile photo){try {service.save(slide,req,photo);return new AjaxResult();} catch (Exception e) {e.printStackTrace(); // 打印异常信息return new AjaxResult(false, "保存失败");}}

SlideServiceImpl

	@Overridepublic void save(Slide slide, HttpServletRequest req,MultipartFile photo) throws Exception {// 获取upload路径String realPath = req.getServletContext().getRealPath("/upload");File file = new File(realPath);		if(!file.exists()){// 如果路径不存在,就创建一个file.mkdirs();}		// 判断photo是否为空if(photo!=null){// 做上传操作	// 获取文件名//获取后缀String oName = photo.getOriginalFilename(); // asldfsadf.jpgString suffix = oName.substring(oName.lastIndexOf("."));String name = System.currentTimeMillis()+suffix;// 准备输入流InputStream input = photo.getInputStream();			// 输出流FileOutputStream output = new FileOutputStream(new File(realPath, name));// 上传的核心代码IOUtils.copy(input, output);// 关流output.close();input.close();// name pathslide.setName(name);slide.setPath("/upload/"+name);}// 添加数据库操作if(slide.getId()==null){if(photo!=null){mapper.add(slide);}}else{// 修改操作}	}

SlideMapper

	<!-- void add(Slide slide); --><insert id="add">insert into t_slide(name,path,createDate,enable) values(#{name},#{path},#{createDate},#{enable})</insert>

tips:文件上传功能

上传三要素 上传解析器 文件上传


http://www.ppmy.cn/news/569866.html

相关文章

Minified React error #185;

Error: Minified React error #185; visit https://reactjs.org/docs/error-decoder.html?invariant185 for the full message or use the non-minified dev environment for full errors and additional helpful warnings. 犯了一个低级错误&#xff0c;在render函数return之…

一刷185-力扣热题-253会议室II(m)

题目&#xff1a; 给定一个会议时间安排的数组&#xff0c; 每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei)&#xff0c; 为避免会议冲突&#xff0c;同时要考虑充分利用会议室资源&#xff0c;请你计算至少需要多少间会议室&#xff0c;才能满足这些…

7-185 整数的分类处理(有注释)

给定 N 个正整数&#xff0c;要求你从中得到下列三种计算结果&#xff1a; A1 能被 3 整除的最大整数A2 存在整数 K 使之可以表示为 3K1 的整数的个数A3 存在整数 K 使之可以表示为 3K2 的所有整数的平均值&#xff08;精确到小数点后 1 位&#xff09; 输入格式&#xff…

关于React #185错误的坑

关于React #185错误的坑 在这里插入图片描述 这几天突然有客户跟我说进入项目直接白屏了&#xff0c;但是只有他的电脑会这样&#xff0c;我现场打开控制台&#xff0c;发现报图中错误&#xff0c;经过查询后&#xff0c;解释全是再render函数中return前用了setState,所以导致…

Linux 命令(185)—— batch 命令

文章目录 1.命令简介2.命令格式3.选项说明4.常用示例参考文献 1.命令简介 batch 在系统空闲的时候执行任务。 与 at 命令不同的地方在于 batch 命令不需要指定时间&#xff0c;自动在系统空闲的时候执行指定的任务。系统空闲指的是系统负载平均值低于 0.8 或 atd 调用中指定的…

toefl 185独立思路

无老师 小站 TWE185题目写作套路 同意上大学好. &#xff08;1&#xff09;为未来工作进行准备 &#xff08;2&#xff09;交更多的朋友&#xff0c;学习他们的思维方式 &#xff08;3&#xff09;系统的学习知识 I think going to the college is the better policy. First…

电信联通上海分别启用181与185号段

上海电信和上海联通9月25日均启用了新号段&#xff0c;“电信181”和“联通185”在上海面世。 当天&#xff0c;上海电信推出“天翼云卡”&#xff0c;办理云卡套餐的用户可抢得181靓号&#xff1b;上海联通则把185号段大量“靓号”留给Nano SIM卡的新用户&#xff0c;iPhone 5…

A002-185-2502-李林

作业A002-185-2502-李林 课程名称 软件需求分析与建模 班级 18软件工程5班 教导教师 董瑞生 李林 1814080902502 日期 2020.12.15 目录 作业内容 目录1、Excel查找结合项目主题说明1.1第一次查词1.1.1 判定表&#xff08;Decision table&#xff09;1.1.2指导委员会&#xff08…