`
isiqi
  • 浏览: 16079622 次
  • 性别: 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

分享到:
评论

相关推荐

    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 聊天...

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

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

    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....

    java开源包9

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

    java开源包101

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

    Java资源包01

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

Global site tag (gtag.js) - Google Analytics