SSH2專案引入百度富文字編輯器Ueditor編輯器
阿新 • • 發佈:2019-01-28
一、整合所需UEditor原始碼
這個可以到http://ueditor.baidu.com/website/download.html#ueditor下載相應版本。
二、導包
把上述包拷貝到WEB-INF的lib下
三、JSP頁面處理
[javascript] view plain copy print?- <script type=“text/javascript” charset=“utf-8” src=“<%= path%>/ueditor/ueditor.config.js”></script>
- <script type=”text/javascript”
- <script type=”text/javascript” charset=“utf-8” src=“<%= path%>/ueditor/lang/en/en.js”> </script>
[javascript] view plain copy print?<script type="text/javascript" charset="utf-8" src="<%= path%>/ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="<%= path%>/ueditor/ueditor.all.min.js"> </script> <script type="text/javascript" charset="utf-8" src="<%= path%>/ueditor/lang/en/en.js"> </script>
- <script id=“editor” name=“newscontent” type=“text/plain” style=“width:800px;height:500px;”>
- </script>
<script id="editor" name="newscontent" type="text/plain" style="width:800px;height:500px;">
</script>
[html] view plain copy print- <script>
- //例項化編輯器
- //建議使用工廠方法getEditor建立和引用編輯器例項,如果在某個閉包下引用該編輯器,直接呼叫UE.getEditor(‘editor’)就能拿到相關的例項
- var ue = UE.getEditor(‘editor’);
- </script>
<script>
//例項化編輯器
//建議使用工廠方法getEditor建立和引用編輯器例項,如果在某個閉包下引用該編輯器,直接呼叫UE.getEditor('editor')就能拿到相關的例項
var ue = UE.getEditor('editor');
</script>
id為editor為顯示編輯框處。四、修改config.json和ueditor.config.js
config.json的”imageUrlPrefix”: “http://127.0.0.1:8080/myproject”, /* 圖片訪問路徑字首 */ueditor.config.js的 var URL = window.UEDITOR_HOME_URL || ”/myproject/ueditor/”; 把myproject改成專案名稱。 五、錯誤處理,可能出現的錯誤 ① java.lang.NoSuchMethodError: org.apache.commons.io.FileUtils.getTempDirectory()Ljava/io/File; 包衝突,commons-io包有多個,刪除其他,只留commons-io-2.4.jar,確保部署檔案中也刪除後重啟服務檢視是否解決,不排除其他包衝突所致。 ②“ 未找到上傳資料 ” 修改struts過濾器,先新增filter類:[java] view plain copy print?
- package com.util;
- import java.io.IOException;
- import javax.servlet.FilterChain;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
- publicclass UeditorFilter extends StrutsPrepareAndExecuteFilter{
- @Override
- publicvoid doFilter(ServletRequest req, ServletResponse res,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- String url = request.getRequestURI();
- System.out.println(url);
- if (url.contains(“/ueditor/jsp/”)) {
- System.out.println(”使用自定義過濾器”);
- chain.doFilter(req, res);
- }else{
- System.out.println(”使用預設過濾器”);
- super.doFilter(req, res, chain);
- }
- }
- }
package com.util;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public class UeditorFilter extends StrutsPrepareAndExecuteFilter{
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String url = request.getRequestURI();
System.out.println(url);
if (url.contains("/ueditor/jsp/")) {
System.out.println("使用自定義過濾器");
chain.doFilter(req, res);
}else{
System.out.println("使用預設過濾器");
super.doFilter(req, res, chain);
}
}
}
再配置web.xml:
[html] view plain copy print?- <!– ueditor start–>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>com.juhu.util.UeditorFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- </filter-mapping>
- <!– ueditor end –>
<!-- ueditor start-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.juhu.util.UeditorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- ueditor end -->
配置成功之後,接下來看後臺如何儲存資料。。。
一、jsp程式碼
[html] view plain copy print?- <s:formaction=“../adminAction!addNews”method=“post”enctype=“multipart/form-data”theme=“simple”>
- <divclass=“form-group”>
- <labelclass=“col-lg-2 control-label”>新聞型別</label>
- <divclass=“col-lg-9”>
- <selectclass=“btn btn-default dropdown-toggle”name=“newstype”><!– 新聞型別 1公司動態 2行業動態 –>
- <optionvalue=“1”>公司動態</option>
- <optionvalue=“2”>行業動態</option>
- </select>
- </div>
- </div>
- <divclass=“form-group”>
- <labelclass=“col-lg-2 control-label”>標題</label>
- <divclass=“col-lg-9”>
- <inputtype=“text”name=“newstitle”class=“form-control”placeholder=“請填寫新聞標題”>
- </div>
- </div>
- <divclass=“form-group”>
- <labelclass=“col-lg-2 control-label”>新聞正文</label>
- <divclass=“col-lg-9”>
- <scriptid=“editor”name=“newscontent”type=“text/plain”style=“width:800px;height:500px;”>
- </script>
- </div>
- </div>
- <palign=“center”>首頁顯示圖片上傳:</p>
- <center>
- <fontcolor=“red”><s:fielderror/></font>
- <s:filename=“image”label=“檔案”></s:file>
- </center>
- <divclass=“form-group”>
- <divclass=“col-sm-offset-2 col-sm-10”>
- <!– <button type=”submit” id=”submit-order” data-loading-text=”正在儲存…” class=”btn btn-primary”>儲存</button> –>
- <inputtype=“submit”value=“儲存”>
- </div>
- </div>
- </s:form>
<s:form action="../adminAction!addNews" method="post" enctype="multipart/form-data" theme="simple">
<div class="form-group">
<label class="col-lg-2 control-label">新聞型別</label>
<div class="col-lg-9">
<select class="btn btn-default dropdown-toggle" name="newstype"><!-- 新聞型別 1公司動態 2行業動態 -->
<option value="1">公司動態</option>
<option value="2">行業動態</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">標題</label>
<div class="col-lg-9">
<input type="text" name="newstitle" class="form-control" placeholder="請填寫新聞標題">
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">新聞正文</label>
<div class="col-lg-9">
<script id="editor" name="newscontent" type="text/plain" style="width:800px;height:500px;">
</script>
</div>
</div>
<p align="center">首頁顯示圖片上傳:</p>
<center>
<font color="red"><s:fielderror/></font>
<s:file name="image" label="檔案"></s:file>
</center>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<!-- <button type="submit" id="submit-order" data-loading-text="正在儲存..." class="btn btn-primary">儲存</button> -->
<input type="submit" value="儲存">
</div>
</div>
</s:form>
主要要注意表格form的一些屬性和文字框的name屬性,文字框的name需要在後臺使用。
二、java後臺程式碼
[java] view plain copy print?- publicvoid addNews() throws IOException{
- User user = (User) session.get(”adminuser”);
- News newstemp = new News();
- newstemp.setState(1);
- newstemp.setAuthor(user.getName());
- Date d = new Date();
- newstemp.setCreatetime(new Timestamp(System.currentTimeMillis()));
- String root = ServletActionContext.getRequest().getRealPath(”/upload”);
- DiskFileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload(factory);
- try {
- List items = upload.parseRequest(ServletActionContext.getRequest());
- Iterator it = items.iterator();
- while (it.hasNext()) {
- FileItem item = (FileItem) it.next();
- if (item.isFormField()) { // 如果是表單域
- if (item.getFieldName().equals(“newstype”)) {
- String newstype = item.getString(”UTF-8”);
- System.out.println(”newstype…”+newstype);
- newstemp.setType(Integer.parseInt(newstype));
- }
- if (item.getFieldName().equals(“newstitle”)) {
- String newstitle = item.getString(”UTF-8”);
- System.out.println(”newstitle…”+newstitle);
- newstemp.setTitle(newstitle);
- }
- if (item.getFieldName().equals(“newscontent”)) {
- String newscontent = item.getString(”UTF-8”);
- System.out.println(”newscontent…”+newscontent);
- newstemp.setContent(newscontent);
- }
- } else { // 如果是檔案,暫時沒有跟新聞相關的檔案,如果後期加新聞標圖可以使用
- if (item.getName() != null && !item.getName().equals(“”)) {
- File file = new File(root,item.getName());
- //newstemp.setNewsimages(“upload/”+item.getName());
- //item.write(file);
- }
- }
- }
- adminService.addNews(newstemp);
- } catch (Exception e) {
- e.printStackTrace();
- System.err.println(”上傳檔案不成功!”);
- }
- String tempUrl = ”admin/newsadd.jsp”;
- try {
- CommonUtil.printResult(ServletActionContext.getResponse(), ”<script >” + “alert(‘新增成功!’);location=’” + tempUrl
- + ”’</script>”);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
public void addNews() throws IOException{
User user = (User) session.get("adminuser");
News newstemp = new News();
newstemp.setState(1);
newstemp.setAuthor(user.getName());
Date d = new Date();
newstemp.setCreatetime(new Timestamp(System.currentTimeMillis()));
String root = ServletActionContext.getRequest().getRealPath("/upload");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(ServletActionContext.getRequest());
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (item.isFormField()) { // 如果是表單域
if (item.getFieldName().equals("newstype")) {
String newstype = item.getString("UTF-8");
System.out.println("newstype..."+newstype);
newstemp.setType(Integer.parseInt(newstype));
}
if (item.getFieldName().equals("newstitle")) {
String newstitle = item.getString("UTF-8");
System.out.println("newstitle..."+newstitle);
newstemp.setTitle(newstitle);
}
if (item.getFieldName().equals("newscontent")) {
String newscontent = item.getString("UTF-8");
System.out.println("newscontent..."+newscontent);
newstemp.setContent(newscontent);
}
} else { // 如果是檔案,暫時沒有跟新聞相關的檔案,如果後期加新聞標圖可以使用
if (item.getName() != null && !item.getName().equals("")) {
File file = new File(root,item.getName());
//newstemp.setNewsimages("upload/"+item.getName());
//item.write(file);
}
}
}
adminService.addNews(newstemp);
} catch (Exception e) {
e.printStackTrace();
System.err.println("上傳檔案不成功!");
}
String tempUrl = "admin/newsadd.jsp";
try {
CommonUtil.printResult(ServletActionContext.getResponse(), "<script >" + "alert('新增成功!');location='" + tempUrl
+ "'</script>");
} catch (IOException e) {
e.printStackTrace();
}
}
jsp中文字框name屬性跟上述的newstype、newstitle等對應相同。
三、struts.xml配置程式碼
[html] view plain copy print?- <!– uditor上傳相關start –>
- <beantype=“org.apache.struts2.dispatcher.multipart.MultiPartRequest”
- name=“myRequestParser”class=“com.util.RequestParseWrapper”
- scope=“default”optional=“true”/>
- <constantname=“struts.multipart.handler”value=“myRequestParser”/>
- <!– uditor上傳相關end –>
<!-- uditor上傳相關start -->
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.util.RequestParseWrapper"
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />
<!-- uditor上傳相關end -->
放在<struts>下,如果沒有加這段程式碼後臺保程式碼中會報List items = upload.parseRequest(ServletActionContext.getRequest());Iterator it = items.iterator();的items、it為空
四、RequestParseWrapper類 [java] view plain copy print?
- import java.io.IOException;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
- publicclass RequestParseWrapper extends JakartaMultiPartRequest {
- publicvoid parse(HttpServletRequest servletRequest, String saveDir)
- throws IOException {
- }
- }
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
public class RequestParseWrapper extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir)
throws IOException {
}
}
五、用pre顯示文章,有時預設情況下,<pre /> 標籤中的內容若超出範圍不會自動換行,會把div撐破,或者看不到部分內容解決方法給pre加樣式:
[css] view plain copy print?- <style type=“text/css”>
- pre {white-space: pre-wrap;
- white-space: -moz-pre-wrap;
- white-space: -pre-wrap;
- white-space: -o-pre-wrap;
- word-wrap: break-word;
- white-space : normal ; }
- </style>
<style type="text/css">
pre {white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
white-space : normal ; }
</style>
完成!