了解接缝过滤器 url-pattern 和可能的冲突

Understanding seam filter url-pattern and possible conflicts

我在 Seam 2.2.2 项目中制作了一个自定义编辑器插件,它以这种方式上传文件:

1) 配置编辑器以加载我特定的 xhtml 上传页面;

2) 在本页调用以下方法,return一个javascript回调;

public String sendImageToServer()
    {
        HttpServletRequest request = ServletContexts.instance().getRequest();
        try
        {
            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
            processItems(items);//set the file data to specific att
            saveOpenAttachment();//save the file to disk
        }
        //build callback

为了让它工作,我必须把它放在里面 components.xml:

<web:multipart-filter create-temp-files="false"  
                  max-request-size="1024000" url-pattern="*"/> 

属性 create-temp-files 似乎与它的值无关。 但是 url-pattern 必须是“”或“/myUploadPage.seam”,任何其他值都会使项目列表 return 为空。有人知道为什么吗?

这变成了一个问题,因为当我使用适用于这种情况的 url 模式时,我的应用程序中每个带有 enctype="multipart/form-data" 的表单都停止提交数据。所以我最终导致系统的其他部分崩溃。 有人可以帮助我吗?

为了解决我的问题,我将解决方案更改为类似于 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 配置。