`
isiqi
  • 浏览: 16352715 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

FCKeditor在 JSP和JSF 网站项目中的应用

阅读更多

让FCKeditor在 JSP和JSF 网站项目中跑起来
一、准备功夫
1.1 下载最新版的FCKeditor
http://www.fckeditor.net/download/
目前最新版是:FCKeditor 2.3.1(FCKeditor_2.3.1)和 FCKeditor.Java(FCKeditor-2.3)
1.2 如果需要使用到jsf的标签库,则还需要下载fck-faces-1.5.1, 你可以到
http://sourceforge.net/projects/fck-faces去下载

说明:
FCKeditor 2.3.1 是功能完善的可视化编辑器,文件上传管理部分功能已经支持asp,php,aspx...等等,
唯独尚未支持jsp,幸运的是Simone Chiaretta制作了Java 的整合文件FCKeditor.Java。


二、部署到项目中去
2.1 把解压后的\FCKeditor_2.3.1\FCKeditor放到项目的WebContent目录下,等候修改
2.2 把解压后的\FCKeditor-2.3\src目录复制到项目源码目录, 等候修改
2.3 把解压后的fck-faces-1.5.1\org目录复制到项目源码目录, 等候修改
注意,暂时不要把解压后的jar包放到lib目录下,因为有些问题需要修改

三、修改
3.1 \FCKeditor\fckeditor.js
修改约第33行的 this.BasePath = '/fckeditor/' ;
为 this.BasePath = '/FCKeditor/' ;

3.2 \FCKeditor\fckconfig.js
修改约第48行的 FCKConfig.DefaultLanguage = 'en' ;
为你喜欢的语言,前提是要它支持。

修改约第134行的
var _FileBrowserLanguage = 'asp' ;
var _QuickUploadLanguage = 'asp' ;

var _FileBrowserLanguage = 'jsp' ;
var _QuickUploadLanguage = 'jsp' ;
(不过这个改不改都没有所谓,因为可以通过修改web.xml来实现servlet的url影射。)

3.3 WEB-INF\web.xml
<!-- FCKEditor -->
<servlet> 这个是“浏览服务器”功能所用到,包括读取和上传
<servlet-name>Connector</servlet-name>
<servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
<param-value>/UserFiles/</param-value> 这个根据需要修改
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value> 调试时候打开
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet> 这个是对话框的简单上传功能所用到,可以上传文件
<servlet-name>SimpleUploader</servlet-name>
<servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
<param-value>/UserFiles/</param-value> 这个根据需要修改
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value> 调试时候打开
</init-param>
<init-param>
<param-name>enabled</param-name>
<param-value>true</param-value> 如果允许
</init-param>
<init-param>
<param-name>AllowedExtensionsFile</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsFile</param-name>
<param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsImage</param-name>
<param-value>jpg|gif|jpeg|png|bmp</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsImage</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsFlash</param-name>
<param-value>swf|fla</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsFlash</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping> 通过观察,发现filemanager请求服务器的路径,就修改如下
<servlet-name>Connector</servlet-name>
<url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping> 这个是Simone Chiaretta的配置,暂时未发现用处
<servlet-name>SimpleUploader</servlet-name>
<url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping> 通过观察,发现filemanager请求服务器的路径,就修改如下
<servlet-name>SimpleUploader</servlet-name>
<url-pattern>/FCKeditor/editor/filemanager/upload/jsp/upload.jsp</url-pattern>
</servlet-mapping>
<!-- End of FCKEditor -->

3.4 修改 com.fredck.FCKeditor.uploader.SimpleUploaderServlet
在约第113行附近,就如下面代码,避免构建null路径:
if (typeStr==null || typeStr.trim().equals("")) typeStr = "File";
(这个是仿照fckeditor在upload.php,upload.asp等源码来修改的)

3.5 修改jsf标签
你可以去这里获得fck-faces的源代码,或者联系作者让他修正错误(忘记处理编辑器的宽高)
http://sourceforge.net/forum/forum.php?forum_id=606070
(实在找不到,你可以考虑反编译其中这个文件)

找到 org.fckfaces.taglib.html.FCKFaceEditorTag 类,修改下面方法
protected void setProperties(UIComponent component)
{
super.setProperties(component);
Tags.setString(component, "toolbarSet", toolbarSet);
}
为:
protected void setProperties(UIComponent component)
{
super.setProperties(component);
Tags.setString(component, "toolbarSet", toolbarSet);
Tags.setString(component, "height", height);
Tags.setString(component, "width", width);
}
相应的,你还需要修改 org.fckfaces.component.html.FCKFaceEditor的saveState(FacesContext context)和restoreState(FacesContext context, Object state)方法,来保存和恢复宽高属性。

public Object saveState(FacesContext context)
{
Object values[] = new Object[4];
values[0] = super.saveState(context);
values[1]=height;
values[2]=width;
values[3] = toolbarSet;
return ((Object) (values));
}

public void restoreState(FacesContext context, Object state)
{
Object values[] = (Object[])(Object[])state;
super.restoreState(context, values[0]);
System.out.println(values.length);
height=(String)values[1];
width=(String)values[2];
toolbarSet = (String)values[3];
}


找到org.fckfaces.util.Util类

在调试fck-faces的时候,发现fck-faces的标签非常强大,居然不用再jsp页面引入fckeditor.js,
它竟然能否自动做到。可惜分析一下这个功能是建立它要求你固定的把FCKeditor的代码放在
/fckfaces/FCKeditor目录下。如果像我把它放在/FCKeditor就需要作出以下修改:

public class Util{

public Util() {}

public static final String internalPath(String path)
{
return (new StringBuilder()).append(FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()).append(FCK_FACES_RESOURCE_PREFIX).append(path).toString();
}

public static final String FCK_FACES_RESOURCE_PREFIX = "/"; //这里原来是/fckfaces
}

如果你是反编译得到的源代码,则编译成功之后,需要替换掉原来jar包里面的这个class文件。
(你可以使用jar命令行来解压jar,换了文件之后在打包。)

如果你是获得源码修改,可能需要注意配置fck-faces.taglib.xml,fck-faces.tld和faces-config.xml。这几个文件在压缩包里面都有。

四、使用

4.1 使用javascipt替换textarea方法
/////////////////////////////////////////////////////
<script type="text/javascript" src="<c:url value="/FCKeditor/fckeditor.js"/>"></script>

<h:form id="newsadd">
<h:outputText value="Title:"/>
<h:inputText value="#{newsAddForm.title }"/>
<br/>
<h:outputText value="Content:"/>
<h:inputTextarea id="content" value="#{newsAddForm.content }" cols="80" rows="5"/>
<br/>
<h:commandButton value="Submit" action="#{newsAddForm.submit }"/>

<script type="text/javascript">
var oFCKeditor = new FCKeditor('newsadd:content') ; //这里设置textarea的id或name
oFCKeditor.BasePath = '<c:url value="/FCKeditor/"/>' ;
oFCKeditor.Height = "80%"; //这里设置高度
oFCKeditor.ToolbarSet = "Default" ;
oFCKeditor.ReplaceTextarea();
</script>
</h:form>
/////////////////////////////////////////////////////

4.2 使用jsf标签
/////////////////////////////////////////////////////
<%@ taglib uri="http://www.fck-faces.org/fck-faces" prefix="fck"%>
<h:form id="form1">
<fck:editor toolbarSet="Default" value="#{fckText.text}" width="80%" height="80%" id="myComponentId" cols="80" rows="18"/>

<h:commandButton action="#{fckText.print}"/>
</h:form>
/////////////////////////////////////////////////////

五、严重注意事项
我的web.xml配置了JSF拦截*.html文件,现在FCKeditor使用了大量的*.html,结果导致
它们都被Faces Servlet拦截了,一个页面都出不来,怎么办呢?
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

想来想去,没有什么好办法,唯有把原来项目中使用*.html的全部改为*.jsf,真惨!
不知道你有什么好方法呢?还请发表评论或者来信告知! samland@21cn.com
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

感谢感谢:http://blog.ccidnet.com/blog-htm-do-showone-uid-37700-itemid-107320-type-blog.html

分享到:
评论

相关推荐

    FCKeditor & FCKeditor.java & fck-faces

    fck-faces允许开发者在JSF应用中直接使用FCKeditor,提供了JSF组件,使得在JSF页面上添加富文本编辑器变得简单。fck-faces-1.7.26.jar是这个组件的库文件,包含了必要的类和资源,用于在JSF项目中引入和使用...

    seam 中使用fckeditor 的点点滴滴

    集成FCKeditor到Seam项目中,首先需要在项目中引入FCKeditor的JavaScript库和CSS文件,通常这可以通过在页面中添加相应的和标签完成。接着,我们需要在Seam组件中创建一个与编辑器交互的后端接口,处理用户提交的富...

    FCKeditor文本编辑器

    **FCKeditor文本编辑器详解** FCKeditor是一款开源的Web富文本编辑器,它允许用户在网页...尽管如此,FCKeditor在许多旧系统和项目中仍然发挥着重要作用,其设计理念和实现方式对后来的富文本编辑器产生了深远的影响。

    需要fckeditor的朋友

    在MyEclipse中解压FCKeditor的压缩包后,开发者可以通过导入Web项目、添加静态资源、配置Servlet等步骤,快速地在自己的应用中实现富文本编辑功能。 具体步骤可能包括以下几点: 1. **导入项目**:在MyEclipse中,...

    FCKeditor java在线编辑器

    在实际应用中,集成FCKeditor到Java项目中的步骤通常包括: 1. **下载与解压**:从官方网站获取FCKeditor的最新版本并解压缩到本地目录。 2. **配置路径**:将FCKeditor的静态资源文件(如JavaScript、CSS、图片等...

    标准的留言板

    这个系统作为一个演示(Demo)项目,展示了如何在Web应用程序中实现一个完整的留言板功能。 首先,我们需要理解Java Web开发的基础。Java Web是一种利用Java技术进行服务器端编程的方法,用于创建交互式的Web应用。...

    JAVA WEB典型模块与项目实战大全

    4.2 fckeditor在线文本编辑器初级应用  4.3 fckeditor在线文本编辑器常用配置  4.4 fckeditor在线文本编辑器高级应用  4.5 小结  第5章 验证模块(jsp+servlet+jsvaildation)  5.1 表单基础  5.2 客户端...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    ajax框架的选择.pdf

    例如,.NET平台通常会使用Microsoft的框架,而JSP或JSF应用可以考虑ZK、Backbase或IceFaces。对于需要丰富客户端体验的企业应用,ZK的Server-centric架构可能在开发和维护成本上更具优势,因为它减少了客户端的复杂...

    zk-javadoc-3.6.0.chm最新3.6.0 JAVA API(完整版目前最全的)包括所有Spring,jsf,gmap等API(非中文)

    ZK官方网站上的最新版本3.6.0的所有发布的zk_doc 包括zk-javadoc-3.6.0,zk-zss,zk-Spring,zk-JspTags,zk-JSFComps,zk-FCKeditor,zk-Gmaps等等,目前最全的,自已做了一个完整版,打包成chm,供给大家使用.

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包7

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics