目前,FCKEditor (http://www.fckeditor.net/) 是开源社区一款强大的HTML编辑器,目前最新版本是2.6,支持Java的插件版本是2.4Beta1。
对于一般的Java Web应用,我们可以通过直接插入JavaScript代码来构造页面,这种方式操作起来比较简便,也是通用在所有web页面的一种方式。但是,在实际的Java Web应用中,我们除了用到普通的页面编辑功能之外,难免会考虑到页面上传图片、附件等功能。所以,单纯使用JavaScript方式的话,这一大堆的文件上传代码将由你自己来写了,工程量还是比较浩大的。自然而然,我们会想到Jsp Tag,有没有现成的快餐式的页面标签呢?答案是肯定的,就如我上文提到的Java插件就已经实现了这些功能,并集成了Apache Commons-FileUpload,以此来实现文件服务器上传。
2.4版的Java插件已经封装得更加简洁,不同于之前的其他版本。标签的使用方式是,
<%@taglib uri="http://java.fckeditor.net" prefix="FCK"%>
<FCK:editor instanceName="EditorDefault" width="755" height="460" basePath="/fckeditor" value="Hello, world">
<jsp:body>
<FCK:config SkinPath="skins/office2003/" />
</jsp:body>
</FCK:editor>
在JSF应用中,由于页面都是JSF自定义标签,对于其他标签的内容,JSF不会自动将后台Bean中的值绑定到<FCK:editor/>,那么我们还要做做文章,通过一段JavaScript绑定到body_onload()事件中,以此将JSF标签的内容传递给<FCK:editor/>。
<script type="text/javascript">
function renderMessage() {
YAHOO.util.Dom.get("EditorDefault").value = YAHOO.util.Dom.get("form:content").value;
}
</script>
<f:view>
<h:form id="form">
<h:inputTextarea id="content" value="#{mainMessageEditBean.message.messageContent}" style="display:none"></h:inputTextarea>
</h:form>
</f:view>
保存HTML编辑内容的时候,你只需要通过获得到的HttpServletRequest对象获取页面提交中的Parameter对象,示例代码如下:
public Map getParamMap() {
return getFacesContext().getExternalContext().getRequestParameterMap();
}
public String getParamAsString(String paramName) {
Object obj = getParamMap().get(paramName);
if (obj != null) {
return obj.toString();
} else {
return "";
}
}
public String saveMessage() {
if (message == null) {
setErrMsg("Message does not exist.");
return null;
}
String content = getParamAsString("EditorDefault");
if (content == null || content.length() == 0) {
setErrMsg("Message must not be empty.");
return null;
}
}
其他方面,我们需要在自己的web.xml中定义FCKEditor相关的Servlet:
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>
net.fckeditor.connector.ConnectorServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>
/fckeditor/editor/filemanager/connectors/*
</url-pattern>
</servlet-mapping>
这里需要注明的是,/fckeditor这个web根目录下的目录来源于FCKEditor的核心包(Ver 2.6),可以在官方网站上面下载得到。
在目录/fckeditor下面有一个重要的文件fckconfig.js,里面可以配置许多FCKEditor在页面上的展示风格,大家可以仔细慢慢研究 :)
PS: 考虑到安全问题,建议大家把FCKEditor界面上的Source Code按钮屏蔽掉,防止黑客的恶意脚本的破坏。
在我的实际应用中,因为要限制上传文件的权限,所以我要用到权限控制。幸好FCKEditor提供了相应的UserAction接口,可以让我自己实现一个类来控制权限。
package com.tail.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.fckeditor.requestcycle.UserAction;
import com.tail.beans.Principal;
import com.tail.objects.User;
public class UserActionImpl implements UserAction {
public boolean isEnabledForFileBrowsing(HttpServletRequest req) {
return true;
}
public boolean isEnabledForFileUpload(HttpServletRequest req) {
HttpSession session = req.getSession();
Principal principal = (Principal) session.getAttribute(ConstantUtil.SESSION_PRINCIPAL);
if (principal != null) {
User user = principal.getUser();
if (user.isUploadable()) {
return true;
}
}
return false;
}
}
如何加载自定义的UserAction类呢?在classes的根目录下,你需要定义一个fckeditor.properties文件:
connector.userActionImpl=com.tail.utils.UserActionImpl
这样你就可以控制文件上传的权限了。
我的2.4Beta1版的JAR包在文件上传上还有一些问题,我已经下载了相应Java Source Code做了修改,一切都运行的比较正常!
PS: 下载的Java Project是基于Maven的,如果不懂Maven的同学抓紧温习温习吧!
分享到:
相关推荐
JSF/Facelets/xhtml学习
MyFaces,jsf使用时用到的包,包括jstl的包,也包括了一些格式和模板文件,将jar放到lib下或者配置到环境中就可以直接使用了
首先在页面引入,假定前缀是h,即这样声明:<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
jsf1.2得源代码,包括jsf-api,jsf-ri,jsf-tools,jsf-doc等等。。。
RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。
用jsf2.0 和 jdbc做的一个试题管理系统 包括登录、增删改差。界面美观 用到了DIV+CSS JAVASCRIPT JSF JDBC
jsf标签总结和说明,以及和html标签的对应关系
NULL 博文链接:https://rensanning.iteye.com/blog/2013260
jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 • 最新的...
JSF和Spring集成
JSF和Spring集成的资料比较少,原理是获得彼此的上下文引用,以此进一步获得各自管理的bean,这是可能的,因为两者是web应用框架都遵循servlet规范,为二者整合提供了可能和基础.
jsf2.0的开发配置说明,和简单的配置例子,开发例子,及JSF2.0的所有标签的详细分析。
JSF组件包含若干个Java类和配置文件。为创建一个自定义JSF组件,您需要开发一个扩展JSF基本组件类的Java类;...开发一个将在JSP页面中用于描述标签的Java类;编写一个标签库定义(TLD)文件;编写JSF配置文件。
Beginning JSP,JSF and Tomcat 书中源码 Beginning JSP,JSF and Tomcat 书中源码
这是时代的经典,实用facelet效果和时间都非常的明显。
JSF中文教程JSF中文教程JSF中文教程JSF中文教程
jsf 中文文档jsf 中文文档jsf 中文文档jsf 中文文档
package composite component into jar maven3 jsf2 UBuntu glassfishv3.0.1 Emacs JDEE
精通JSF中文教程精通JSF中文教程精通JSF中文教程精通JSF中文教程精通JSF中文教程精通JSF中文教程
java jsp jsf fx java jsp jsf fx java jsp jsf fx