浏览 5971 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-03-27
先说怎么做,再稍微解释一下为什么这么做 1.webwork.properties里面设置 webwork.serve.static=false webwork.multipart.parser=cos 2. 在webapp的根目录下建一个文件夹webwork,把webwork.jar里面的 /com/opensymphony/webwork/static和/template里面的文件和复制到自己建的webwork文件夹里面,在 /webwork/richtexteditor里面建文件夹data(可能会自动建,没测试过) 3.写一个RichtexteditorConnector package test; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.opensymphony.webwork.components.DefaultRichtexteditorConnector; public class RichtexteditorConnector extends DefaultRichtexteditorConnector { public static final Log _log = LogFactory .getLog(RichtexteditorConnector.class);; private ServletContext servletContext; public void setServletContext(ServletContext servletContext); { this.servletContext = servletContext; } protected String calculateActualServerPath(String actualServerPath, String type, String folderPath); throws Exception { String path = servletContext.getRealPath(actualServerPath);; path = path.replace('\\', '/');; makeDirIfNotExists(path);; path = path.endsWith("/"); ? path : path + "/"; return path + type + folderPath; } protected Folder[] getFolders(String virtualFolderPath, String type); throws Exception { String path = calculateActualServerPath(getActualServerPath();, type, virtualFolderPath);; makeDirIfNotExists(path);; java.io.File f = new java.io.File(path);; java.io.File[] children = f.listFiles(new FileFilter(); { public boolean accept(java.io.File pathname); { if (!pathname.isFile();); { return true; } return false; } });; List tmpFolders = new ArrayList();; for (int a = 0; a < children.length; a++); { tmpFolders.add(new Folder(children[a].getName();););; } return (Folder[]); tmpFolders.toArray(new Folder[0]);; } protected FoldersAndFiles getFoldersAndFiles(String virtualFolderPath, String type); throws Exception { String path = calculateActualServerPath(getActualServerPath();, type, virtualFolderPath);; makeDirIfNotExists(path);; java.io.File f = new java.io.File(path);; java.io.File[] children = f.listFiles();; List directories = new ArrayList();; List files = new ArrayList();; for (int a = 0; a < children.length; a++); { if (children[a].isDirectory();); { directories.add(new Folder(children[a].getName();););; } else { try { files.add(new File(children[a].getName();, fileSizeInKBytes(children[a]);););; } catch (Exception e); { _log.error("cannot deal with file " + children[a], e);; } } } return new FoldersAndFiles((Folder[]); directories .toArray(new Folder[0]);, (File[]); files.toArray(new File[0]););; } protected FileUploadResult fileUpload(String virtualFolderPath, String type, String filename, String contentType, java.io.File newFile); { try { String tmpDir = calculateActualServerPath(getActualServerPath();, type, virtualFolderPath);; makeDirIfNotExists(tmpDir);; String tmpFile = tmpDir + filename; if (makeFileIfNotExists(tmpFile);); { // already exists int a = 0; String ext = String.valueOf(a);; tmpFile = calculateActualServerPath(getActualServerPath();, type, virtualFolderPath); + filename + ext; while (makeFileIfNotExists(tmpFile);); { a = a + 1; ext = String.valueOf(a);; if (a > 100); { return FileUploadResult.invalidFile();; } } copyFile(newFile, new java.io.File(tmpFile););; return FileUploadResult .uploadCompleteWithFilenamChanged(filename + ext);; } else { copyFile(newFile, new java.io.File(tmpFile););; return FileUploadResult.uploadComplete();; } } catch (Exception e); { _log.error(e.toString();, e);; e.printStackTrace();; return FileUploadResult.invalidFile();; } } protected void unknownCommand(String command, String virtualFolderPath, String type, String filename, String contentType, java.io.File newFile); { throw new RuntimeException("unknown command " + command);; } /** * * @param path * @return true if file already exists, false otherwise. */ protected boolean makeDirIfNotExists(String path); { java.io.File dir = new java.io.File(path);; if (!dir.exists();); { _log.debug("make directory " + dir);; boolean ok = dir.mkdirs();; if (!ok); { throw new RuntimeException("cannot make directory " + dir);; } return false; } return true; } protected boolean makeFileIfNotExists(String filePath); throws IOException { java.io.File f = new java.io.File(filePath);; if (!f.exists();); { _log.debug("creating file " + filePath);; boolean ok = f.createNewFile();; if (!ok); { throw new RuntimeException("cannot create file " + filePath);; } return false; } return true; } } 4.xwork.xml加上 <package name="richtexteditor-browse" extends="webwork-default" namespace="/webwork/richtexteditor/editor/filemanager/browser/default/connectors/jsp"> <action name="connector" class="test.RichtexteditorConnector" method="browse"> <param name="actualServerPath"> /webwork/richtexteditor/data </param> <result name="getFolders" type="richtexteditorGetFolders" /> <result name="getFoldersAndFiles" type="richtexteditorGetFoldersAndFiles" /> <result name="createFolder" type="richtexteditorCreateFolder" /> <result name="fileUpload" type="richtexteditorFileUpload" /> </action> </package> <package name="richtexteditor-upload" extends="webwork-default" namespace="/webwork/richtexteditor/editor/filemanager/upload"> <action name="uploader" class="test.RichtexteditorConnector" method="upload"> <param name="actualServerPath"> /webwork/richtexteditor/data </param> <result name="richtexteditorFileUpload" /> </action> </package> 5.配置标签 <ww:form action="test" method="post"> <%request.setAttribute("contextPath",request.getContextPath(););;%> <ww:richtexteditor basePath="%{#request.contextPath}/webwork/richtexteditor/" toolbarCanCollapse="false" width="700" label="description" name="content" defaultLanguage="zh-cn" /> <ww:submit value="submit" /> </ww:form> 6.服务器端口设置为80 原因 1. webwork.serve.static=false /webwork/*这样的URL是可以直接访问不需要通过webwork,这样做是为了自己可以在里面建文件,并且可以方便的访问这些文件 webwork.multipart.parser=cos 设置为jakarta上传文件不成功, com.opensymphony.webwork.interceptor.FileUploadInterceptor解析 MultiPartRequestWrapper不成功,原因不清楚,反正用cos就可以了,记得加上cos.jar 2.因为设置了webwork.serve.static=false需要这样做 3. 覆盖webwork的DefaultRichtexteditorConnector,最关键的是覆盖 calculateActualServerPath()方法,默认是把文件放到/WEB- INF/classes/com/opensymphony/webwork/static/richtexteditor/data/,我们需要放到 /webwork/richtexteditor/data/里面,覆盖其他方法是因为默认对文件的访问都是通过 new File(new URI("file://"+filePath);来访问的,会有些问题,直接new File(filePath)就可以了 4.使用自己的RichtexteditorConnector,并且设置参数actualServerPath,其他参数不要改,webwork默认的是这样 5.basePath 必须自己指定不能用默认的,虽然指定的值和默认的是一样,但是不自己指定的话它自动加上jsessionid,如 /webwork/richtexteditor/;jsessionid=301gs94034pki/editor/fckeditor.html, 因为设置了webwork.serve.static=false,所以服务器不能解析这个url defaultLanguage="zh-cn",不指定的话中文默认是繁体 6.服务器端口必须为80不能为8080,因为fckeditor链接你上传的文件的时候,不会把端口加上去 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-03-29
在FireFox下面用不了富文本编辑。我的版本是1.5。这就够郁闷的了
|
|
返回顶楼 | |
发表时间:2006-03-30
我想我是海 写道 在FireFox下面用不了富文本编辑。我的版本是1.5。这就够郁闷的了
FCK Editor在FF1.5和1.0下应该可以工作的,我们的项目可以。不过我们没有用Webwork 2.2.2的方式,是直接用FCK Editor,感觉查不多的。 |
|
返回顶楼 | |
发表时间:2006-04-25
楼主能不能提供一个用富文本编辑器上传文件的例子啊?我这崩溃了,webwork自带的也没有啊,帮助中只讲了些方法,不实用啊
|
|
返回顶楼 | |