报课、招生咨询电话:010-51268840/41

首页 > 计算机考试 > 试题汇编 > JAVA考试 > 试题 >
→论坛登陆 用户名  密码  
让FCKeditor在JSP和JSF项目中跑起来

作者: 发布时间:2008-04-25 17:35:08 来源:

一、准备功夫
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>
 
OK, 祝你顺利!

    育路网
 
 
                                        
评论】【加入收藏夹】【 】【打印】【关闭
育路网2007年夏令营联展
 更多有关新闻:
 
·[作文雅思写作高分必读:小作文句子模 ·[资讯中心湖北:2008上半年英语等级考试(P
·[试题让FCKeditor在JSP和JSF项目中跑起 ·[试题Java EE:Ajax技术何时才能与之融
·[试题Java认证权考试威问答精华集 ·[试题WebSphere MQ程序设计初探
·[新闻资讯考生必看:导游资格考试应注意的 ·[新闻资讯导游资格考试辅导:热点问答100题
·[试题java入门指导 Java中的日期处理 ·[试题了解Java密码扩展的基础
·[试题JAVA基础知识精华总结 ·[报考指南国家营养师职业资格考试报考条件
·[试题介绍嵌套类和内部类 ·[报考指南高级公共营养师试题
·[异国风情荷兰文化 ·[CISCO资格认证Cisco认证网络工程师介绍
发表评论
用户名: 密码:
验证码: 匿名发表
课程搜索:
选择分类:
课程关键字:
课程 学校
 2008年首都高校秋季招生
北京理工大学2008年招生简章
北京文理研修学院2008年招生简章
北京建设大学2008年招生简章
北京中山学院2008年招生简章
北京城市学院2008年招生简章
培黎职业学院2008年招生简章
北京金融学院2008年招生简章
北京吉利大学2008年招生简章
北方工商管理学院2008年招生简章
 本周推荐课程
·初中起点雅思半年脱产 ·启德雅思6分冲刺课程
·新概念1+2册慢速精讲课 ·环球新托福100分强化
·北文王长喜四级强化班 ·英语四、六级培训课程
·海文考研数学课程 ·海文考研英语课程
·北大企业管理高级研修班 ·清华企业领导人研修班
·中美高中生交换项目 ·北工大中加学院2+2本科
·劳动和社会保障部物流师 ·物业管理师职业培训
·市场营销经理国际资格 ·现场管理实务培训
清华大学留学
中法管理硕士预科班
课程咨询热线:010-51268840 51268841
 最新新闻
·人力资源管理师如何清楚他们跳槽的真实原因?
·人力资源管理师要成为员工心目中的“大众情人
·我国专业人力资源管理人才缺乏
·北京劳动和社会保障局:旷工职员 企业无权开除
·留学美国的苦与乐
·奥运英语1000句(1)
·托福必读:语法考试考生必知的十大规则
·中美已就中国公民赴美组团旅游细节达成协议
·美元持续贬值院校出招应对 美国学费可能要涨
·高考独木桥VS留学 高考与留学如何兼得?
 育路社区            进入>>
 
学员报名服务中心: 北京北三环西路32号恒润中心1806(交通位置图
咨询电话:北京- 010-51268840/41 传真:010-51418040 上海-021-64392659、64397431
育路网-中国新锐教育社区: 北京站 | 上海站 | 郑州站| 武汉站
本站法律顾问: 邱清荣律师
北京育路互联科技有限公司版权所有 | 京ICP备05012189号