FCKeditor,作为现在功能最强大的在线HTML编辑器,网上关于他的功能介绍以及基本配置已经很多了。然而其中不少文章涉及面都比较局限。最近,笔者需要在自己项目中使用到FCKeditor,并用之于和已有的基于JSF的web应用整合。从对FCKeditor一窍不通到成功达成整合,我从网上学到了不少知识,自己也积累了不少经验,因此,也想和大家一起分析这一过程。
1.基本配置:
知之为知之,不知google之。关于FCKeditor的基本配置在网上自有高人指点,这里我也不多耽误大家时间。主要是谈下自己当初配置的问题:
a.基本路径:
注意FCKeditor的基本路径应该是/(你的web应用名称)/(放置FCKeditor文件的文件夹名)/
我的目录结构为:
因此,我的基本路径设置为:/fck/FCKeditor/
b.文件浏览以及上传路径设置:
我个人的参考如下:
FCKConfig.LinkBrowser = true ;
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/jsp/connector' ;
FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70%
FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70%
FCKConfig.ImageBrowser = true ;
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector';
FCKConfig.ImageBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% ;
FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% ;
FCKConfig.FlashBrowser = true ;
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector' ;
FCKConfig.FlashBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; //70% ;
FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; //70% ;
FCKConfig.LinkUpload = true ;
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;
FCKConfig.LinkUploadAllowedExtensions = "" ; // empty for all
FCKConfig.LinkUploadDeniedExtensions = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ; // empty for no one
FCKConfig.ImageUpload = true ;
FCKConfig.ImageUploadURL =FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;
FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png)$" ; // empty for all
FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one
FCKConfig.FlashUpload = true ;
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;
FCKConfig.FlashUploadAllowedExtensions = ".(swf|fla)$" ; // empty for all
FCKConfig.FlashUploadDeniedExtensions = "" ; // empty for no one
2.与JSF整合。
FCKeditor与JSF整合的最大问题,在于需要从JSF环境中相应Bean读取值赋予给FCKeditor,同时从FCKeditor里面读取结果赋予给相应的数据持有Bean。由于这一过程在传统的JSF标签中是通过值绑定有框架自动完成,因此这里需要我们手动来实现这一过程。
以下要展示的demo由两部分组成:
form.jsp显示编辑内容,点击其submit按钮跳转至test.jsp,test.jsp调用FCKeditor对form.jsp中显示的已有内容进行显示和编辑。编辑完后点击submit,页面将重新跳转到form.jsp,显示修改后的内容。
其实,这就是一个很基本的编辑功能,在论坛和blog中都可以看到它的身影。
而ContextBean用于持有待编辑的内容,它的scope是session范围。ContextServlet用于读取FCKeditor修改后的内容,并赋予ContextBean中。
首先来看form.jsp
<body>
<f:view>
<h:form>
<pre>
<h:outputText value="#{td.name}" escape="false"></h:outputText>
</pre>
<br/>
<h:commandButton value="submit" action="#{td.submit}"></h:commandButton>
</h:form>
</f:view>
</body>
这个页面很简单,其中td对应的就是ContextBean,ContextBean.name用于保存编辑内容
package com.dyerac;
public class ContextBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String submit() {
return "edit";
}
}
下面来看test.jsp
用过FCKeditor的都知道,FCKeditor可以通过三种方式来调用:
script, jsp 标签以及java代码。
这里,为了方便从ContextBean中读取name属性内容作为其初始值,我使用了第三种方法
其中FCKeditor fck=new FCKeditor(request,"EditorDefault");初始化FCKeditor,第二个参数即为该FCKeditor实例的id,当提交后FCKeditor内的内容将以该参数为变量名保存在request中。
比如,这里我选择了EditorDefault,所以日后读取FCKeditor内容时,可以通过以下语句:
request.getParameter("EditorDefault")
<body>
<form action="/fck/servlet/ContextServlet" method="post" target="_blank">
<%FCKeditor fck=new FCKeditor(request,"EditorDefault");
FacesContext fcg=FacesContext.getCurrentInstance();
ContextBean td=(ContextBean)fcg.getApplication().getVariableResolver().resolveVariable(fcg,"td");
fck.setBasePath("/fck/FCKeditor/");
fck.setValue(td.getName());
fck.setHeight(new Integer(600).toString());
out.print(fck.create());
%>
<input type="submit" value="Submit">
</body>
修改后的结果以post方式提交给/fck/servlet/ContextServlet,该url对应的即为ContextServlet。
ContextServlet负责读取FCKeditor里的内容,并赋予给session中的ContextBean。doPost()方法用于实现该功能
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
FacesContext fcg = getFacesContext(request,response);
ContextBean td = (ContextBean) fcg.getApplication()
.getVariableResolver().resolveVariable(fcg, "td");
String name=new String(request.getParameter("EditorDefault").getBytes("ISO-8859-1"),"UTF-8");
td.setName(name);
RequestDispatcher rd=getServletContext().getRequestDispatcher("/form.faces");
rd.forward(request, response);
}
需要注意两个问题,
其一:FCKeditor内的中文信息读取是可能出现乱码,需要额外的处理:
String name=new String(request.getParameter("EditorDefault").getBytes("ISO-8859-1"),"UTF-8");
其二:由于servlet处于FacesContext范围外,因此不能通过FacesContext.getCurrentInstance()来得到当前FacesContext,因此ContextServlet定义了自己的方法用于获取FacesContext:
// You need an inner class to be able to call FacesContext.setCurrentInstance
// since it's a protected method
private abstract static class InnerFacesContext extends FacesContext
{
protected static void setFacesContextAsCurrentInstance(FacesContext facesContext) {
FacesContext.setCurrentInstance(facesContext);
}
}
private FacesContext getFacesContext(ServletRequest request, ServletResponse response) {
// Try to get it first
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext != null) return facesContext;
FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
// Either set a private member servletContext = filterConfig.getServletContext();
// in you filter init() method or set it here like this:
// ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();
// Note that the above line would fail if you are using any other protocol than http
ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();
// Doesn't set this instance as the current instance of FacesContext.getCurrentInstance
facesContext = contextFactory.getFacesContext(servletContext, request, response, lifecycle);
// Set using our inner class
InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
// set a new viewRoot, otherwise context.getViewRoot returns null
//UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, "yourOwnID");
//facesContext.setViewRoot(view);
return facesContext;
}
ContextServlet处理完了FCKeditor内容后,将跳转到form.jsp。
这样一个简单的编辑功能就完成了。
3.遗留问题:
我在上传文件时还是会出现中文乱码的问题,按照其他人说的那样把网页的charset=utf-8改成gb2312一样会有问题,还请各位高手赐教^_^
分享到:
相关推荐
在"fckeditor与swfupload整合实例"中,我们主要关注如何将这两个工具结合起来,使用户能够在FCKeditor中方便地上传文件。整合过程通常包括以下几个步骤: 1. **安装和配置FCKeditor**:首先,你需要下载FCKeditor的...
然而,EXT本身并不内置富文本编辑功能,这就需要我们与其他编辑器进行整合。 **3. FCKEditor与EXT结合的优势** - **功能互补**:EXT擅长构建UI布局,而FCKEditor则专注于文本编辑,两者结合可以提供完整的编辑解决...
本主题主要探讨的是如何将FCKeditor(一个流行的开源JavaScript富文本编辑器)与EXT(一个强大的JavaScript UI库)整合在一起,实现高效且美观的网页编辑工具。 **FCKeditor介绍** FCKeditor是一款基于浏览器的富...
标题“ext-fckeditor整合”指的是将EXT框架与FCKeditor集成到一起,以创建一个具有高级文本编辑功能的EXT应用。这样的整合可以使开发者在EXT构建的应用中嵌入一个功能强大的文本编辑器,方便用户编辑和管理文本内容...
Struts2 和 FCKeditor 的整合是Web开发中一个常见的需求,特别是在需要提供富文本编辑器功能时。FCKeditor是一款强大的开源JavaScript文本编辑器,而Struts2是一个流行的Java Web应用框架。本文将详细讲解如何将...
将FCKeditor与JSP整合,可以为用户提供一个图形化的界面,方便地在Web应用中编辑和格式化文本。 **1. FCKeditor介绍** FCKeditor是一个基于JavaScript的富文本编辑器,支持多种浏览器,包括IE、Firefox、Chrome、...
fck-faces则是FCKeditor与JSF(JavaServer Faces)框架的整合组件。JSF是一种Java的MVC(Model-View-Controller)框架,用于构建Web应用程序。fck-faces允许开发者在JSF应用中直接使用FCKeditor,提供了JSF组件,...
本示例将探讨如何将FCKeditor与web EQ整合,以便用户在编辑内容时能够方便地插入和编辑数学公式。 **FCKeditor介绍** FCKeditor是一款基于JavaScript的开源富文本编辑器,它允许用户在浏览器环境中进行类似于Word的...
将Struts与FCKeditor整合,主要是为了让用户在Web表单中能够方便地编辑和提交富文本内容。这个整合过程主要包括以下几个步骤: 1. **引入FCKeditor库**:首先需要将FCKeditor的JavaScript文件和相关资源(如CSS、...
**JSP与FCKeditor整合实例** 在Web开发中,我们常常需要编辑器来处理用户输入的富文本,比如文章内容、产品描述等。`FCKeditor`是一款强大的开源在线HTML编辑器,它允许用户像在Word中一样编辑内容,并且能够将其以...
在SSH(Struts、Spring、Hibernate)项目中整合FCKeditor文本编辑器是常见的需求,因为FCKeditor是一款功能强大的富文本编辑器,能够提供丰富的文本格式化和媒体插入功能,便于用户在Web应用程序中创建和编辑内容。...
这个压缩包提供了FCKeditor 3.52与FCKfinder 2.02的整合实例,使用户能够方便地在编辑器中上传和管理资源。 FCKeditor是一款JavaScript实现的富文本编辑器,它支持多种浏览器,并且提供了一套完整的WYSIWYG(所见即...
.NET开发者可以利用ASP.NET控件或者JavaScript API将FCKeditor整合到ASP.NET Web应用程序中,为用户提供强大的文本编辑功能。 总结起来,FCKeditor 2.6.6是一个经典的在线文本编辑器,尽管现在有更多先进的替代品,...
在Kohana框架中整合FCKeditor,可以提升网站内容管理系统的用户体验,使得非技术背景的用户也能方便地创建和编辑内容。 **集成FCKeditor到Kohana框架的步骤** 1. **安装FCKeditor**: 首先,你需要从官方站点下载...
在FCKeditor 2.6.8中,开发人员需要将压缩包解压后,将相关文件整合到网站项目中。主要包含以下步骤: - **下载并解压**:下载FCKeditor_2.6.8.zip,解压得到fckeditor目录。 - **引入编辑器**:将fckeditor目录...
由于目前的版本提供的FCKEDITOR仅提供了JAVASCRIPT式的整合,因此,这里仅讲述如何应用JAVASCRIPT来整合FCKEDITOR到站点中,当然,其他各种语言的整合,你可以参考_samples文件夹中的例子来完成 1,假如编辑器已经安装在你...
1.下载附件 ,解压到 FCKeditor 的 FCKeditor/editor/plugins/magicplayer 目录。 2.编辑 FCKeditor/fckconfig.js 查找 FCKConfig.PluginsPath = FCKConfig.BasePath 'plugins/' ; 在后面加上 FCKConfig....
FCKeditor是一款强大的开源文本编辑器,主要用于网页内容的创建和编辑。它的名称来源于"Freeware Complete Kit for Web Editors"的首字母缩写,旨在提供一个功能丰富的HTML编辑器,让非技术人员也能轻松编辑网页内容...
本文档详细介绍了如何将富文本编辑器Fckeditor与Java企业级框架Dorado进行整合,以实现更高效、更丰富的Web内容编辑功能。Fckeditor是一款强大的开源JavaScript富文本编辑器,而Dorado则是一个基于Java的轻量级MVC...