SpringBoot使用WangEditor富文本编辑器

wangEditor是基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费。

 

若需要使用可以在wangEidtor官网上查看开发文档,或者去直接下载依赖包

直接上前端代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>wangEditor demo</title>
<link rel="stylesheet" type="text/css"
	th:href="@{./layui/css/layui.css}">
<style type="text/css">
.toolbar {
	border: 1px solid #ccc;
	width: 50%;
	margin-top: 15px;
}

.text {
	border: 1px solid #ccc;
	height: 400px;
	width: 50%;
}
.layui-btn{
	margin-top: 20px;
}
.layui-form .layui-input{
	height: 50px;
	border-radius: 5px;
}

</style>
</head>
<body>
<form action="" class="layui-form" id="formid">
	<input type="text" name="title" lay-verify="title" autocomplete="off"
		placeholder="请输入标题" class="layui-input"
		style="width: 50%; margin-bottom: 15px;margin-top: 25px;" id="titleid">

	<div id="div1" class="toolbar"></div>
	<div style="padding: 5px 0; color: #ccc; width: 50%"></div>
	<div id="div2" class="text" placeholder="请输入标题" lay-verify="content">
		<!--可使用 min-height 实现编辑区域自动增加高度--0%>-->

	</div>
	<input type="text" name="type" lay-verify="type" autocomplete="off" required="required"
		placeholder="请输入类型" class="layui-input" id=typeid""
		style="width: 20%; margin-top: 15px;display: inline;">
	<input type="text" name="tag" lay-verify="tag" autocomplete="off" required="required"
		placeholder="请输入标签,空格分开" class="layui-input" id="tagid"
		style="width: 20%; margin-top: 15px;margin-left: 9%;display: inline;"><br>
	<button type="button" lay-submit="" class="layui-btn layui-btn-primary" id="btn2">立即发表</button>
	<button type="button" lay-submit="" class="layui-btn layui-btn-primary">保存草稿</button>
</form>
	<!-- 注意, 只需要引用 JS,无需引用任何 CSS !!!-->
	<script type="text/javascript"
		th:src="@{./wangEditor-3.1.1/release/wangEditor.min.js}"></script>
	<script type="text/javascript" th:src="@{./js/jquery-1.11.3.min.js}"></script>
	<script type="text/javascript" th:src="@{./layui/layui.js}"></script>
	<script type="text/javascript">
		var E = window.wangEditor
		var editor = new E('#div1', '#div2') // 两个参数也可以传入 elem 对象,class 选择器

		//开启debug模式
		editor.customConfig.debug = true;
		editor.customConfig.uploadFileName = 'myfile';
		editor.customConfig.uploadImgServer = 'article/upload';
		editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024;
		
		editor.customConfig.uploadImgMaxLength = 5
		editor.customConfig.uploadImgHooks = {
			    before: function (xhr, editor, files) {
			        // 图片上传之前触发
			        // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件
			        
			        // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
			        // return {
			        //     prevent: true,
			        //     msg: '放弃上传'
			        // }
			    },
			    success: function (xhr, editor, result) {
			        // 图片上传并返回结果,图片插入成功之后触发
			        // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果
			    	layer.msg('OK');
			    },
			    fail: function (xhr, editor, result) {
			        // 图片上传并返回结果,但图片插入错误时触发
			        // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果
			    },
			    error: function (xhr, editor) {
			        // 图片上传出错时触发
			        // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象
			    },
			    timeout: function (xhr, editor) {
			        // 图片上传超时时触发
			        // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象
			    	layer.msg('响应超时');
			    },

			    // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置
			    // (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错)
			    customInsert: function (insertImg, result, editor) {
			        // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
			        // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果
			        // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
			        var url = result.data
			        alert(url)
			        insertImg(url)

			        // result 必须是一个 JSON 格式字符串!!!否则报错
			    }
			    
			}
		editor.create()
		
    	$(".layui-form .layui-input").click(function(){
    		$(this).css("border-left","5px #009688 solid");
    	}).focusout(function(){
    		$(this).css("border-left","1px solid #e6e6e6");
    	});
	    layui.use(['form', 'layedit', 'laydate'], function(){
		  var form = layui.form
		  ,layer = layui.layer
		  ,layedit = layui.layedit
		  ,laydate = layui.laydate;
		  form.verify({
			    title: function(value){
			      if(value.length==0){
			        return '标题不能为空啊';
			      }else if(value.length<5){
			        return '标题不能小于5个字符啊';
			      }
			    },
			    type: function(value){
			      if(value.length==0){
			        return '类型不能为空啊';
			      }else if(value.length>10){
			        return '类型不能大于10个字符啊';
			      }
			    },
			    tag: function(value){
			      if(value.length==0){
			        return '标签不能为空啊';
			      }else if(value.length>5){
			        return '标签不能大于5个字符啊';
			      }
			    },
			    content: function(value){
			      if(editor.txt.text()==0){
			        return '文章内容不能为空啊';
			      }
			    },
		  });
		  document.getElementById('btn2').addEventListener('click', function () {
		        // 读取 text
		        // alert(editor.txt.html())
		        $.ajax({
		        	url: "article/write",
		        	data: $("#formid").serialize()+"&content="+editor.txt.html(),
		        	type: "get",
		        	success:function(result){
		        		layer.alert('发表成功',
								{title:'成功提示'});
		        	}
		        })
		        
		    }, false)
	    });
	</script>
</body>
</html>

没有很花心思地写样式什么的,就是简单的使用,效果图就一般般吧!

 

 

最后,在前后端交互方面,wangEditor要求返回值的json格式要求,在此自编写了一个bean作为返回对象,转成json对象就即可符合要求了:


import java.util.Arrays;

public class WangEditor {
	
	private Integer errno; //错误代码,0 表示没有错误。
	private String[] data; //已上传的图片路径
	
	public WangEditor() {
		super();
	}
	public WangEditor(String[] data) {
		super();
		this.errno = 0;
		this.data = data;
	}
	public Integer getErrno() {
		return errno;
	}
	public void setErrno(Integer errno) {
		this.errno = errno;
	}
	public String[] getData() {
		return data;
	}
	public void setData(String[] data) {
		this.data = data;
	}
	@Override
	public String toString() {
		return "WangEditor [errno=" + errno + ", data=" + Arrays.toString(data)
				+ "]";
	}
	

}

在controller中直接获取内容,操作成功以后,把WangEditor对象返回即可。

@RequestMapping(value="/upload" , method = RequestMethod.POST)
	public WangEditor uploadSource(@RequestParam("myfile") MultipartFile file , HttpServletRequest request) {
		System.out.println(file);
		String pathString = null;		
		//设置图片上传路径
		String url = request.getSession().getServletContext().getRealPath("/upload");
		String path = null;
		if(file!=null) {
			path = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" +file.getOriginalFilename();
			pathString = url+"/"+path;
		}
		WangEditor we = null;
		try {
			File files=new File(pathString);
            //打印查看上传路径
            System.out.println(pathString);
            if(!files.getParentFile().exists()){
                files.getParentFile().mkdirs();
            }
			file.transferTo(files);
			String[] str = { "/upload/"+path };
			we = new WangEditor(str);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			log.error("上传文件失败", e);
		} 	
		return we;
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值