SSH(Struts2 + Hibernate + Spring)嵌入 KindEditor(KE)

本文详细介绍了KindEditor富文本编辑器的集成过程,包括解决图片上传问题及与Struts2框架的兼容性调整。提供了自定义图片上传处理的代码示例。

    1、    kindeditor 灌水 (下载地址,demo)

 
        经过两天的折磨,又源代码,又官网学习,又网络搜索的,终于成功的嵌入KindEditor了。
KindEditor确实是个不错的富文本编辑器,纯JS,比起JQuery写的,夸浏览器更佳。
所以在多种富文本编辑器中,死死认定了KE就是我要的~~

网站里有相应的DEMO以及解说
 
           KE除了图片上传(个人浅见),其他功能并不会涉及到框架问题。
 
2、图片上传改动:
将KE嵌入项目之后,找到进入plugins -- image ,打开image.html
A、找到    var imageUploadJson = (typeof KE.g[id].imageUploadJson == 'undefined') ? ' ../../php/upload_json.php ' :     KE.g[id].imageUploadJson;  KE默认是用PHP来处理图片上传的,所以改成自己的(如:upload_json.jsp)。
路径要注意咯~~
 
之后就开始写(upload_json.jsp)自己的处理过程了。
因为KE图片上传功能是通过Ajax实现的,所以,对JSONObject这些jar包是免不了的。下载的KE包里有json_simple-1.1.jar。省了功夫去找。
 
 
B、只要 对下载下来的JSP(版) 上传文件demo文件里的   upload_json.jsp  进行 文件存储路径的修改 就可以轻易搞定,完全不需要自己去动工。
 
 
不过如果是用SSH框架,而Struts2 web.xml 配置的Struts过滤器如下的话:
      也就是对所有的访问请求进行过滤,那么通常会在使用KE上传本地图片时会报  “服务器发生故障”之类的错误。
Struts2 对 所有 enctype="multipart/form-data"(上传文件用的表单数据类型) 的表单的request进行了封装。打包成MultiPartRequestWrapper 。这就导致拿不到原本的request了。
有个 简单的方法是将 url-pattern 标签里的内容改成其他的,如:*.action 。在路径以及其他的小问题都有注意修改的情况下,这样就可以上传图片成功了,并且可以在textarea里看到图片。
 
      不过,又会有其他的问题产生,比如,你的网页经常性用到 struts-tag 标签,那么可能就会 报 404 或者 500 的错误,因为普通jsp网页在没有调用action时,使用struts标签会访问不到元素。
又一个纠结(悲剧,项目做到后面才去玩KE,所以,还是不改动url了)~~ 自己写action处理上传吧,也不怎么奏效。
 
查了查资料,其实,这是struts带给我们的方便。在不改动<url-pattern>/*</ url-pattern>的情况下 重写upload_json.jsp
 
3、 代码:
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"%>
<%@page import="java.util.concurrent.locks.*" %>
<%@page import="java.io.*" %>
<%@ page import="org.json.simple.*" %>
 
<%
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
//获得上传的文件名
String fileName = wrapper.getFileNames("imgFile")[0];
//获得未见过滤器
File file = wrapper.getFiles("imgFile")[0];
//----------重新构建上传文件名---------
final Lock lock = new ReentrantLock();
String newName = null;
lock.lock();
try{
//加锁为防止文件名重复
newName = System.currentTimeMillis()
  +fileName.substring(fileName.lastIndexOf("."),
  fileName.length());
}finally{
lock.unlock();
}
//------锁结束---------
//获取文件输出流
FileOutputStream fos = new FileOutputStream(request.getSession()
.getServletContext().getRealPath("/")
+"team/" + newName);
//设置 KE 中的图片文件地址
String newFileName = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/team/" + newName;
byte[] buffer = new byte[1024];
//获取内存中当前文件输入流
InputStream in = new FileInputStream(file);
try{
int num = 0;
while((num = in.read(buffer)) > 0){
fos.write(buffer,0,num);
}
}catch(Exception e){
e.printStackTrace(System.err);
}finally{
in.close();
fos.close();
}
//发送给 KE 
 
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", newFileName);
out.println(obj.toJSONString());
%>
 
               OK,成功了~~ 总算搞定了~~ SSH(Struts2 + Hibernate + Spring)嵌入 KindEditor(KE) - cecil2007 - ︻=-虚┈┾

转载于:https://www.cnblogs.com/shanmao/p/3481246.html

# KindEditor 变更记录# ver 3.4.3 * BUG: 修改了重复编辑超级链接时每次都添加&的问题。 * BUG: 修改了在IE上右键菜单没有复制、剪切项目的问题。 * BUG: 修改了在IE上没有格式化<font color=#000>代码的问题。 * BUG: 修改了PHP上传程序日期格式不正确的问题。 * BUG: 修改了在IE上代码模式下全屏本地URL自动变成绝对URL的问题。 * BUG: 修改了在代码模式下KE.util.setFullHtml函数不显示HTML内容的问题。 * 改善: 弹出框未指定任何按钮(yesButton, noButton, previewButton)时,不显示底部DIV。 ver 3.4.2 (2010-04-04) * 增加: 添加了KE.util.isEmpty函数,用于判断编辑器是否有可见内容。 * 改善: 页面很小时弹出菜单的上下位置不变。 * 改善: 插入超级链接未选中内容时插入URL文本。 * 改善: 插入超级链接的打开类型为当前窗口时删除A标签的target属性。 * BUG: 修改了在IE上HTML属性值里输入JS代码时格式出现错误的问题。 * BUG: 修改了cssPath属性为空时加载首页的问题。 * BUG: 修改了当浏览器出现滚动条并拖动调整大小时控制不住的问题。 * BUG: 修改了embed代码丢失自定义属性的问题。 * BUG: 修改了在IE上切换到代码模式后点击图标触发onbeforeunload事件的问题。 * BUG: 修改了在Firefox上光标在图片旁边时点击鼠标右键,弹出右键菜单的问题。 * BUG: 修改了在Firefox上无法修改/删除图片的超级链接的问题。 * BUG: 修改了在Webkit上有时候无法添加/修改/删除图片的超级链接的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值