2011-11-16 64 views
0

我使用tomahawk(1.1.11)和Mojarra(2.1.4)开发JSF应用程序。当我上传小文件(kb)时,它工作正常,但当我上传大约160Mb的文件时,它会发送一个错误空源t:fileInputUpload上传文件时为空源

这里是我到目前为止的代码:

<h:form id="menuForm" enctype="multipart/form-data"> 
     <h:outputLabel for="option" value="Acciones disponibles: " /> 
     <h:selectOneMenu id="option" 
         value="#{uploadFile.option}"> 
      <f:selectItem itemLabel="Seleccione una opción..." itemValue="null" /> 
      <f:selectItems value="#{uploadFile.options}" /> 
      <f:ajax render="@form" execute="@form" /> 
     </h:selectOneMenu> 

     <h:panelGrid id="dataLoad" columns ="3" 
        rendered="#{uploadFile.option == 'Agregar información (sin validación).' || 
           uploadFile.option == 'Cargar información completa (con validación).' || 
           uploadFile.option == 'Cargar solo información errónea (con validación).'}"> 
      <h:outputLabel for="upfile" value="Archivo: " /> 
      <t:inputFileUpload id="upfile" 
           value="#{uploadFile.upFile}" /> 
      <h:panelGroup/> 
      <h:panelGroup/> 
      <h:commandButton value="Continuar" 
          onclick="return confirmation()" 
          action="#{uploadFile.upload}" /> 
     </h:panelGrid> 

     <h:panelGrid id="dataValidate" columns="3" 
        rendered="#{uploadFile.option == 'Validar información actual.'}"> 
      <h:commandButton value=" Validar " action="#{uploadFile.validate()}"/> 
     </h:panelGrid> 

     <h:panelGrid id="listFiles" columns="3" 
        rendered="#{uploadFile.option == 'Visualizar todos los archivos.'}"> 
      <t:tree2 id="tree" value="#{listFiles.treeRoot}" 
        var="node" varNodeToggler="t" 
        clientSideToggle="false"> 
       <f:facet name="folder"> 
        <h:panelGroup> 
         <t:graphicImage value="images/folderOpen.png" 
             rendered="#{t.nodeExpanded}" 
             border="0" /> 
         <t:graphicImage value="images/folderClose.png" 
             rendered="#{!t.nodeExpanded}" 
             border="0" /> 
         <h:outputText value="#{node.description}" 
             styleClass="nodeFolder" /> 
        </h:panelGroup> 
       </f:facet> 
       <f:facet name="file"> 
        <h:panelGroup> 
         <h:commandLink immediate="true" 
             action="#{listFiles.download(node.identifier)}"> 
          <t:graphicImage value="images/file.png" border="0" /> 
          <h:outputText value="#{node.description}" /> 
         </h:commandLink> 
        </h:panelGroup> 
       </f:facet> 
      </t:tree2> 
     </h:panelGrid> 
    </h:form> 

,实际上我需要上传比更大的文件,甚至高达2 GB。有任何建议吗?

UPDATE

下面是完整的堆栈跟踪

java.lang.IllegalArgumentException: null source 
at java.util.EventObject.<init>(Unknown Source) 
at javax.faces.event.SystemEvent.<init>(SystemEvent.java:71) 
at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:73) 
at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:73) 
at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:271) 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:257) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:269) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

UPDATE

我也会把web.xml文件,也许我错过了一些配置。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <context-param> 
     <param-name>org.apache.myfaces.CHECK_EXTENSIONS_FILTER</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <filter> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> 

     <init-param> 
      <param-name>uploadMaxFileSize</param-name> 
      <param-value>5g</param-value> 
     </init-param> 
     <init-param> 
      <param-name>uploadThresholdSize</param-name> 
      <param-value>500m</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>MyFacesExtensionsFilter</filter-name> 
     <servlet-name>/faces/*</servlet-name> 
    </filter-mapping> 
</web-app> 
+0

请在您的问题中包含完整的堆栈跟踪。 – BalusC

+0

我也添加了web.xml配置,也许我错过了tomahawk的一些配置。 – BRabbit27

回答

0

终于!我发现问题的原因,但我不确定发生了什么,所以我想如果有人能帮助我解决这个问题。

首先,问题是web.xml文件。在最后我有这样的事情

<filter-mapping> 
    <filter-name>MyFacesExtensionsFilter</filter-name> 
    <servlet-name>/faces/*</servlet-name> 
</filter-mapping> 

所以我从web.xml中删除,并把它上传该文件没有任何问题!我认为,服务器与`filter-mappingservlet-mapping混淆。我希望有更多经验的人帮助我(和所有阅读这个问题的人)清楚这件事。

+0

另一方面,我能够以Mb的顺序上传文件,但我需要上传约3.86 Gb的文件。我尝试上传大文件,但它不发送任何错误/异常。 – BRabbit27

+1

''应该指向'FacesServlet'的'',不代表URL模式。你已经有了正确的,所以确实删除了错误的条目。 – BalusC

0

兔子,你可以撕裂了Apache的通用FileUpload JAR您正在使用

的FileUploadBase文件,并设置最大文件和请求大小限制,如果你的愿望。这是我在搜索任何配置项目以克服大小限制后,自定义apaches上的限制文件上载1.2.1 100mb的限制,它强加给我。

你可以得到SRC关闭http://commons.apache.org/proper/commons-fileupload//index.html

只需修改源文件编译和覆盖现有在你的类文件的FileUpload罐子

确保你得到的是完全对应于文件的版本的源压缩上传你否则您可能会遇到问题

相关问题