富文本框编辑与分页

这篇博客介绍了Markdown编辑器的增强功能,包括富文本框的使用,如回填、删除操作;主页面轮播图的展示;以及分页的实现,包括PageList和SqlCondition类的创建。此外,还提到了Markdown编辑器的扩展功能,如快捷键、代码高亮、图片拖拽、KaTeX数学公式、甘特图、UML图表和Flowchart流程图等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、富文本框

1.1 由于html中原生的textarea功能太弱,无法完成一些字体,颜色等功能,因此我们在开的时候经常会使用富文本框

UEditor, CKEditor,wangEditor 市面用得比较多的富文本框

使用是的wangEditor,要学习的话可以去看它的官网 -> http://www.wangeditor.com/

主要是完成文本框的展示
...

1.2 修改的回填功能
①.单选框的回填

需要保存的是被选中的那一个input加上checked属性

②.富文本框数据的回显

var E = window.wangEditor
var editor = new E(’#intro’);
var $text1 = $(’#txtIntro’);
editor.customConfig.onchange = function(html) {
// 监控变化,同步更新到 textarea
KaTeX parse error: Expected 'EOF', got '}' at position 18: …xt1.val(html); }̲ editor.create(…{img.intro}’)
// 初始化对应的内容
$text1.val(editor.txt.html());

1.3 删除功能

删除数据的时候同时也要删除相应的文件(图片) file.delete()

@RequestMapping("/delete")
public String delete(Integer id,HttpServletRequest req){
//注意:在咱们删除功能前还要先把图片删除了
//1.拿到咱们的Image数据
Images images = imageService.findOne(id);
if(images!=null){
//2.拿到真实的路径
String realPath = req.getServletContext().getRealPath("");
//3.拿到文件路径
String filePath = images.getStorepath();
//4.获取到文件
File file = new File(realPath+filePath);
//5.删除文件
file.delete();
}
imageService.delete(id);
return “redirect:/images/query”;
}

二.主页面的轮播图展示

会去从后台拿到所有图片
把图片在相应的轮播位置进行循环
注意: 咱们循环的时候要保证第一个图片有.active样式的

<c:forEach items=" i m g s &quot; v a r = &quot; i m g &quot; v a r S t a t u s = &quot; s &quot; &gt; &lt; d i v c l a s s = &quot; i t e m &lt; c : i f t e s t = &quot; {imgs}&quot; var=&quot;img&quot; varStatus=&quot;s&quot;&gt; &lt;div class=&quot;item &lt;c:if test=&quot; imgs"var="img"varStatus="s"><divclass="item<c:iftest="{s.index==0}">
active
</c:if>
">
码农



</c:forEach>

三.分页

一个系统,由于数据量都会比较多,所以开发的时候都会做分页功能的
真分页(limit)与假分页(内存中)
    真分页:匀速,用户体验还可以,用得多一点
    假分页:每一次非常慢(后面就快),还会占内存

3.1 创建分页对象 PageList

把分页的所有数据封装给传给前端
哪些属性(当前页,每页条数,首页,尾页,上一下,下一页,总页数,总条数,当前页数据)
当前页,每页条数 -> 前台传过来
总条数,当前页数据 -> 数据库中查出来
上一页,下一页,总页数 -> 计算出来的

/**

  • 分页对象
  • @author Administrator

*/
public class Page {

//当前页 -> 前台传过来
private int currentPage = 1;
//每页条数 -> 前台传过来/自己定义
private int pageSize = 10;
//首页(第一页)
private int firstPage = 1;
//上一页 计算出来  currentPage>1?currentPage-1:1
private int prevPage;
//下一页 计算出来 currentPage<lastPage?currentPage+1:lastPage
private int nextPage;
//尾页 == 总页数 
private int lastPage;
//总页数 计算出来 totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1
private int totalPage;
//总条数 -> 数据库中查询出来
private int totalCount;
//当前页的数据 -> 数据库中查询出来
private List<T> data = new ArrayList<>();

public Page(){}
/**
 * @param currentPage:前台传过来
 * @param pageSize:前台传过来
 * @param totalCount:数据库中查询
 * @param data:数据库中查询
 */
public Page(int currentPage, int pageSize, int totalCount, List<T> data) {
	this.currentPage = currentPage;
	this.pageSize = pageSize;
	this.totalCount = totalCount;
	this.data = data;
	//计算上一页  当前页>1 ? 当前页-1 : 1
	this.prevPage = this.currentPage>1 ? this.currentPage-1 : 1;
	//计算总页数 总条数%每页条数==0? 总条数/每页条数:总条数/每页条数+1
	this.totalPage = this.totalCount%this.pageSize==0?this.totalCount/this.pageSize:this.totalCount/this.pageSize+1;
	this.lastPage = this.totalPage; //最后一页就是总页数
	//计算下一页 当前页<总页数?当前页+1:总页数;
	this.nextPage = this.currentPage<this.totalPage?this.currentPage+1:this.totalPage;
}
public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getFirstPage() {
		return firstPage;
	}
	public void setFirstPage(int firstPage) {
		this.firstPage = firstPage;
	}
	public int getPrevPage() {
		return prevPage;
	}
	public void setPrevPage(int prevPage) {
		this.prevPage = prevPage;
	}
	public int getNextPage() {
		return nextPage;
	}
	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}
	public int getLastPage() {
		return lastPage;
	}
	public void setLastPage(int lastPage) {
		this.lastPage = lastPage;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public List<T> getData() {
		return data;
	}
	public void setData(List<T> data) {
		this.data = data;
	}

}

3.2 创建SQL条件对象 SqlCondition

接收前台传过来的分页条件(currentPage,pageSize)

public class SqlCondition {
//当前页
private int currentPage = 1;
//每页条数
private int pageSize = 10;

public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	@Override
	public String toString() {
		return "SqlCondition [currentPage=" + currentPage + ", pageSize=" + pageSize + "]";
	}

}

3.3 在dao中添加了相应的方法

根据条件查询到数据,封装成Page对象 返回

/**

  • 最后返回的是Page对象,里面都要有值
  •  Page(int currentPage, int pageSize, int totalCount, List<T> data)
    

/
@Override
public Page queryAll(SqlCondition condition) {
//①.拿到当前页与每页条数
int currentPage = condition.getCurrentPage();
int pageSize = condition.getPageSize();
//一.查询总条数
//1.1 准备查询总条数的sql
String sql = "select count(
) from t_image";
//1.2执行sql拿到总条数
Integer totalCount = jdbcTemplate.queryForObject(sql, Integer.class);
//二.查询当前页的数据
//2.1 计算当前页是从第几条数据开始的
int beginIndex = (currentPage-1) * pageSize;
//2.2 准备相应的SQL
String dataSql = “select * from t_image limit “+beginIndex+”,”+pageSize;
//2.3 执行查询功能
List data= jdbcTemplate.query(dataSql, new BeanPropertyRowMapper<>(Images.class));

//三.创建PageList对象并且返回
Page page = new Page(currentPage,pageSize,totalCount,data);
return page;

}

3.4 前端展示数据

controller中的修改

@RequestMapping("/query")
public String query(SqlCondition condition,Model model){
model.addAttribute(“page”,imageService.queryAll(condition));
return “main”;
}

页面中的展示(循环的是page.data)

<c:forEach items="${page.data}" var=“img”>

</c:forEash>

分页条把值加上 -> ?currentPage=1

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loveJuly_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值