java中带有apache fileUpload parseRequest的自定义ckeditor fileUpload返回空列表

java中带有apache fileUpload parseRequest的自定义ckeditor fileUpload返回空列表,java,file-upload,ckeditor,seam,apache-commons,Java,File Upload,Ckeditor,Seam,Apache Commons,我有一个seam 2.2.2应用程序,我正在尝试为它定制ckeditor文件上传插件 我提出的解决方案是: 1) 初始化具有“编辑器”样式类的所有元素的编辑器: var elements = CKEDITOR.document.find('.editor'); for(var i = 0; i< elements["$"].length; i++){ CKEDITOR.replace(elements["$"][i], { filebrowserUp

我有一个seam 2.2.2应用程序,我正在尝试为它定制ckeditor文件上传插件

我提出的解决方案是:

1) 初始化具有“编辑器”样式类的所有元素的编辑器:

var elements = CKEDITOR.document.find('.editor');
for(var i = 0; i< elements["$"].length; i++){
        CKEDITOR.replace(elements["$"][i], {
            filebrowserUploadUrl: rootPath + "/cops/filebrowserUploadUrl.seam"
        });
    }
3) 使用apache commons fileUpload实现后端:

public void sendImageToServer()
{       
    HttpServletRequest request = ServletContexts.instance().getRequest();
    DiskFileItemFactory factory = new DiskFileItemFactory();

    File repository = (File) request.getAttribute("javax.servlet.context.tempdir");
    factory.setRepository(repository);
    ServletFileUpload upload = new ServletFileUpload(factory);

    try
    {
        List<FileItem> items = upload.parseRequest(request);
        processItems(items); //set the file data to specific att
        saveOpenAttachment(); //save the file to disk
    }
public void sendImageToServer()
{       
HttpServletRequest=ServletContexts.instance().getRequest();
DiskFileItemFactory=新的DiskFileItemFactory();
filerepository=(File)request.getAttribute(“javax.servlet.context.tempdir”);
setRepository(repository);
ServletFileUpload upload=新的ServletFileUpload(工厂);
尝试
{
列表项=upload.parseRequest(请求);
processItems(items);//将文件数据设置为特定att
saveOpenAttachment();//将文件保存到磁盘
}
此方法调用正确。我可以在请求中删除上载参数(带有一些二进制数据),但上载。parseRequest(请求)返回一个空列表。我已经搜索了此问题,并尽了我所能,但我无法判断应用程序自定义FaceletViewHandler是否导致此问题。 虽然如果我能找到这个问题的解决方案,我会非常满意,但我觉得这不是一个好的解决方案。也许Seam与facelets的集成可以给我一个更好的解决方案。我真的不知道。
有什么建议吗?

最终解决方案类似于Seam多部分过滤器句柄请求:

ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
try
{
  if (!(request instanceof MultipartRequest))
  {
     request = unwrapMultipartRequest(request);
  }

  if (request instanceof MultipartRequest)
  {
     MultipartRequest multipartRequest = (MultipartRequest) request;

     String clientId = "upload";
     setFileData(multipartRequest.getFileBytes(clientId));
     setFileContentType(multipartRequest.getFileContentType(clientId));
     setFileName(multipartRequest.getFileName(clientId));
     saveOpenAttachment();
  }
}

现在,我像Seam一样处理请求,不需要破坏其他类型请求的web:multipart filter配置。

我通过执行List items=new ServletFileUpload(new DiskFileItemFactory())得到建议。parseRequest(请求)在mycomponents.xml的bean和设置中。但仍然有一个疑问:任何其他url模式都会导致崩溃。有人知道为什么吗?
ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
try
{
  if (!(request instanceof MultipartRequest))
  {
     request = unwrapMultipartRequest(request);
  }

  if (request instanceof MultipartRequest)
  {
     MultipartRequest multipartRequest = (MultipartRequest) request;

     String clientId = "upload";
     setFileData(multipartRequest.getFileBytes(clientId));
     setFileContentType(multipartRequest.getFileContentType(clientId));
     setFileName(multipartRequest.getFileName(clientId));
     saveOpenAttachment();
  }
}