【问题标题】:Richfaces fileupload ErrorRichfaces 文件上传错误
【发布时间】:2011-11-02 10:27:54
【问题描述】:

我尝试使用rich:fileupload componenet 上传文件。当我尝试上传文件时,出现错误, 错误是

Aug 24, 2011 9:41:19 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
        at org.richfaces.renderkit.FileUploadRendererBase.doDecode(FileUploadRendererBase.java:140)
        at org.ajax4jsf.renderkit.RendererBase.decode(RendererBase.java:75)
        at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:764)
        at javax.faces.component.UIInput.decode(UIInput.java:719)
        at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1006)
        at javax.faces.component.UIInput.processDecodes(UIInput.java:633)
        at javax.faces.component.UIForm.processDecodes(UIForm.java:203)
        at org.ajax4jsf.component.AjaxViewRoot$1.invokeContextCallback(AjaxViewRoot.java:392)
        at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
        at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409)
        at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
        at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
        at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:365)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:679)

请帮我解决这个问题。

【问题讨论】:

    标签: java jsp jsf richfaces


    【解决方案1】:

    堆栈跟踪提示您同时使用 RichFaces 3.3 和 Tomahawk 1.x。两个组件库都提供文件上传组件,并使用特殊的Filter 从请求正文中提取上传的文件。堆栈跟踪显示 Tomahawk 正在解析请求正文 RichFaces 之前。

    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:365)
    ...
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
    

    请求正文一旦被解析,就不能再被解析。因此,RichFaces 无法从请求正文中提取上传的文件。你所面临的NullPointerException 只是这个无法预料的后果(RichFaces 的家伙应该抛出一个更明确的异常,比如IllegalStateException 带有消息“请求正文中缺少上传的文件”或类似,但阿拉)。

    如果您想使用 RichFaces 文件上传功能,那么您真的必须从 web.xml 中删除 Tomahawk 的 ExtensionsFilter。您只会错过<t:inputFileUpload> 功能和特定外观组件的一些次要功能(脚本/样式表)。其他 Tomahawk 组件应该可以正常工作。

    【讨论】:

      【解决方案2】:

      RichFaces 3.3 文件上传工作正常 按照这个步骤。

      Add this in your page:
      
      <rich:fileUpload id="fileupload" addControlLabel="Browse" required="true"
      fileUploadListener="#{ demoForm.listener}" acceptedTypes="xml"
      ontyperejected="alert('Only xml files are accepted');"
      maxFilesQuantity="1" listHeight="57px" listWidth="100%" disabled="#{demoForm.disabled}" >
      <a4j:support event="onclear" action="#{ demoForm.clearUploadData}" reRender="fileupload" />
      </rich:fileUpload>
      

      FormBean:

      /**
      *
      * @param event
      * @throws Exception
      */
      public void listener(UploadEvent event) throws Exception{
      UploadItem item = event.getUploadItem();
      FileUpload file = new FileUpload();
      file.setLength(item.getData().length);
      file.setFile(item.getData());
      file.setName(item.getFileName());
      files.add(file);
      }
      
      
      /**
       * 
       * @return
       */public String clearUploadData() {
      files.clear();
      setUploadsAvailable(1);
      return null;
      }
      

      在 web.xml 中添加此内容

      <!-- Richfaces  fileupload-->
          <filter>
              <!-- Parameters used by rich file upload -->
              <init-param>
                  <param-name>createTempFiles</param-name>
                  <param-value>false</param-value>
              </init-param>
              <!-- configurable property of rich:fileUpload to set maximum allowed file size, currently set to  200MB -->
              <init-param>
                  <param-name>maxRequestSize</param-name>
                  <param-value>209715200</param-value>
              </init-param>
              <init-param>
                  <param-name>forceparser</param-name>
                  <param-value>false</param-value>
              </init-param>
          </filter>
      

      【讨论】:

      • 虽然您提供了一个关于如何使用文件上传组件的非常详尽的示例 - 我认为它没有被赞成,因为它没有帮助他解决他的问题。尽管如此,它可能仍然是有益的,因为它可能会帮助其他偶然发现它并在富人面孔示例方面遇到问题的人!
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多