Easy FCKEditor使用问题

       Easy FCKEditor是一个Tapestry组件,它使FCKEditor能方便的在Tapestry中使用,几乎支持FCKEditor所有的功能,包括文件上传。其官方网站为 http://t5-easy-fckeditor.kenai.com/

       目前Easy FCKEditor的最新版本为1.0.4, 支持Tapestry 5.1.0.5. 使用是请注意这一点。基本使用是相当简单,请看官方例子http://t5-easy-fckeditor.kenai.com/Simple.html; 我就不在此嗷述了。

       简单说下我使用中碰到的问题。

 

       1. 在本机winxp, tomcat6工作的很好,但是放到linux服务器却出错,Editor根本没有办法显示找不到页面"/assets/easyfck/fckeditor/editor/fckeditor.html?InstanceName=fckeditor&Toolbar=Default". 刚开始一直不得其解,后仔细比较了下本机正确显示,确实是没有这个路径啊! /assert  前面少了站点的Context名称。

         郁闷中不得不看Easy FCKEditor的源码,一番折腾发现,FCKEditor的basedir是FckEditorService 的getApplicationContext()方法取到的。其实现类中有如下代码:

//Has the application context been given by the client module?
String applCtx = "";
try {
applCtx = symbolSource.valueForSymbol( FckEditorConstants.APPLICATION_CONTEXT );
} catch (RuntimeException re) {
//Try to use the getContextPath method that was introduced in servlet spec 2.5
try {
String context = servletContext.getContextPath();
applCtx = context + "/";
} catch (Throwable throwable) { //Default to root context
applCtx = "/";
}
}
this.applicationContext = applCtx;
 

     显然applicationContext是先取FckEditorConstants.APPLICATION_CONTEXT ,取不到则取servletContext.getContextPath(),如果还是取不到,就是"/".

 

          所以现在可以明确 linux上跑的时候,servletContext.getContextPath();肯定没有取到。为什么呢? 为了搞清这个问题,我改了代码专门打印这个servletContext.getContextPath(); 发现改方法确实抛了异常,如下,

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
        at code.review.web.pages.AssignToMe.getSource(AssignToMe.java:38)
        at $PropertyConduit_12b2ed25516.get($PropertyConduit_12b2ed25516.java)
        at org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:58)
        at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:510)
        at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:496)
        at code.review.web.components.ItemList._$read_parameter_source(ItemList.java)
        at code.review.web.components.ItemList.getSource(ItemList.java:71)
        at code.review.web.components.ItemList.getReviewItems(ItemList.java:78)
        at $PropertyConduit_12b2ed254f3.get($PropertyConduit_12b2ed254f3.java)
        at org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:58)
        at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:510)
        at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl$1.read(InternalComponentResourcesImpl.java:496)
        at org.apache.tapestry5.corelib.components.Grid._$read_parameter_source(Grid.java)
        at org.apache.tapestry5.corelib.components.Grid.setupDataSource(Grid.java:442)
        at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java:428)
        at org.apache.tapestry5.corelib.components.Grid.setupRender(Grid.java)

 

   并且Tomcat启动时,有异常信息如下,

INFO: validateJarFile(...../WEB-INF/lib/geronimo-servlet_2.5_spec-1.2.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

 

 

     Google了一下,怀疑Linux上的Tomcat5.27版本低了,换成tomcat6, 果然问题就解决了。

 

    下篇将专门说明上传文件的配置, 这也困扰我很长时间。

 

你可能感兴趣的:(java,apache,linux,fckeditor,tapestry)