`
tailsherry
  • 浏览: 136182 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

在JSF/JSP中集成FCKEditor 2.6

阅读更多

目前,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的同学抓紧温习温习吧!

 

 

2
4
分享到:
评论
10 楼 cg20061563 2009-03-09  
# public Map getParamMap() { 
#     return getFacesContext().getExternalContext().getRequestParameterMap(); 
# }  这个在Java里面显示是错误的信息。
9 楼 fralepg 2009-02-25  
8 楼 tailsherry 2008-10-07  
pengjj2 写道

而且我用connector.userActionImpl=com.tail.utils.UserActionImpl 上传图片报203错误,上传文件就说我权限不够,我晕

一般都是这个错误了,是因为要修改一下2.4Beta1版的JAR包,其中的源代码还存在问题。其实你自己调试一下就知道了
7 楼 pengjj2 2008-10-02  
而且我用connector.userActionImpl=com.tail.utils.UserActionImpl
上传图片报203错误,上传文件就说我权限不够,我晕
6 楼 pengjj2 2008-10-02  
2.4demol也无法上传啊
5 楼 tailsherry 2008-07-18  
这样可能要修改FCKEditor的源码了,目前FCKEditor的编辑框好像也不支持本地文件显示编辑吧?

一般的都是采用先上传图片,然后加入图片链接的做法。
4 楼 teateattt 2008-07-14  
我也在JSF中使用,想请教,怎么才能让FCKEditor支持粘贴时自动上传图片?
icersoft_at_qq.com
3 楼 tailsherry 2008-06-02  
详细的文档我相信还没有出来,不过你可以下载里面的Samples目录,看看里面的例子就可以了。其实很简单的
2 楼 blackeye&hair 2008-05-29  
1 楼 rockjava 2008-05-29  
不错,我正想试试2.4Beta1呢,不过没配置对,能否给个关于2.4Beta1配置的详细文档?

相关推荐

    jsf/jstl/MyFaces包

    在"jsf/jstl/MyFaces包"中,包含的JSTL包意味着你可以直接在JSF应用中使用JSTL的功能。这使得开发者能够将业务逻辑与视图层更好地分离,提高代码的可读性和可维护性。 将这些包放入项目的`lib`目录,或者将其配置到...

    JSF/JDBC试题管理系统 netbeans & java DB

    综上所述,"JSF/JDBC试题管理系统 netbeans & java DB"是一个使用现代Web技术构建的教育软件,它结合了前端的JSF、CSS和JavaScript以及后端的JDBC和Java DB,通过NetBeans IDE进行开发,实现了用户登录、试题管理等...

    Java代码中使用JSP/JSF表达式语言EL

    Java代码中使用JSP/JSF表达式语言(EL,Expression Language)是Web开发中的一个核心概念,它允许开发者在页面上动态地访问和操作JavaBean或其他数据源的数据。EL提供了一种简洁的方式来读取和设置Java对象的属性,...

    JSF+HTML标签总结

    例如,`&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;`导入了JSF核心库,`prefix="f"`定义了前缀,使得我们可以使用`&lt;f:...&gt;`来调用该库中的标签。 1. `h:inputTextarea`是JSF中的文本区域组件,其...

    jsf1.2 source code

    `jsf-api`包含了JSF框架的公共接口和类,这些定义了开发者如何在他们的应用程序中与JSF交互。API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。...

    jsf facelet 的用法

    xmlns:ui="http://java.sun.com/jsf/facelets"&gt; &lt;title&gt;Base Template&lt;/title&gt; &lt;/head&gt; &lt;ui:insert name="header"&gt;Default Header&lt;/ui:insert&gt; &lt;ui:insert name="content"&gt;Default Content&lt;/ui:insert&gt; ...

    jsf/RichFaces组件

    RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。

    JSF和Spring集成.doc

    集成的核心在于如何让 JSF 和 Spring 在同一 Servlet 容器环境中相互访问彼此的上下文。这是因为 JSF 和 Spring 都遵循 Servlet 规范,因此可以在相同的 Servlet 容器中运行。具体来说,Spring 的 `...

    JSF H 标签在HTML中的对应元素

    在JSF中,H标签是一组与HTML元素相对应的UI组件,它们被设计用来创建用户界面并与服务器进行交互。这些H标签允许开发者以声明式的方式创建表单、按钮、图像等元素,并自动处理数据提交和回显。 1. UIForm (h:form) ...

    seam 中使用fckeditor 的点点滴滴

    本文将围绕“Seam框架中使用FCKeditor”的主题进行详细探讨,结合给出的标签“源码”和“工具”,我们将深入理解如何在Seam项目中集成并使用FCKeditor,以及相关的依赖库。 Seam是一个Java EE框架,它整合了JSF...

    FCKeditor & FCKeditor.java & fck-faces

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

    NetBeans中JSF应用开发

    在本文中,我们将深入探讨如何在NetBeans IDE中开发基于Java...在页面中声明JSF标签库,将`&lt;%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;`替换为`&lt;%@ taglib prefix="f" uri="http://java.sun....

    jsp/jsf和XML/XSLT技术整合的精华

    jsp/jsf和XML/XSLT技术整合的精华 随着JSTL 1.0,JSP™ 2.0和JSF 1.0技术 的介入,JSP™技术已经成为一个成熟的主 流表现层技术,但是它还没有提供足够的灵 活性和模块化 。 服务器端Java™技术的发展 • 最新的...

    JSF中文教程jsf

    在JSF中,**组件** 是UI的基础元素,如按钮、文本输入框等。这些组件可以通过XML(Facelets)或JSP页面进行声明,并且可以组合成更复杂的视图结构。**Facelets** 是JSF推荐的视图定义语言,它比JSP更强大,更易于...

    JSP和JSF合并 打造完美的Web层应用

    **二、JSP中使用JSF** JSF通过标签库与JSP集成,这些标签库类似于ASP.NET的服务端组件。JSF提供了丰富的标签集,可以生成HTML、WML、XML和JavaScript等客户端模型。开发者可以利用这些标签轻松构建复杂的客户端交互...

    jsf_page.rar_ jsf_page_JSF_PAGE_java jsf_jsf glassfish_jsp page

    在JSF中,JSP通常作为视图层,用于渲染JSF组件。 - JSF的视图是由UI组件(如输入字段、按钮等)组成的,这些组件在JSP页面上声明,然后由JSF框架处理用户交互和数据绑定。 3. Java EE组件: - GlassFish是Java EE...

    多功能计算器(java,jsf,jsp)

    【描述】中提到的项目是一个基于Java Server Faces(JSF)框架开发的计算器应用,它结合了Java后端技术和JavaServer Pages(JSP)用于前端展示。这个项目不仅提供了基本的计算功能,还可能包含了更多复杂的运算选项...

Global site tag (gtag.js) - Google Analytics