2011-03-18 65 views
0

由於昨天我在上傳jsf web應用程序中的文件時遇到困難。我找到的教程(來自balusC,另一個來自官方的java教程頁面)非常好,但不知何故它仍然不能運行。我猜web.xml有問題,因爲這是我在google上找到的答案,但對我來說仍然沒有好結果。 現在詳細: 首先:我建立一個新的項目來測試上傳,所以如果有太多的庫(如果有這樣的s.th.),請讓我知道。其次:它是我大學的一門課程,所以有一些東西,我不得不使用,比如h2-database和glassfish應用服務器。t:JSF中的inputFileUpload在myBean.submit()上拋出NullPointerException()

庫使用:
的commons-EL-1.0.jar
公地fileupload.1.2.1.jar
公地IO-1.3.2.jar
公地logging.1.1.1.jar
tomahawk20-1.1.10.jar
h2-1.2.141.jar
的jboss-EL-2.0.1.GA.jar
JSTL-1.2.jar
JSF-api.jar中

我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 

<display-name>Test</display-name> 

<session-config> 
    <session-timeout>15</session-timeout> 
</session-config> 

<servlet> 
    <servlet-name>FacesServlet</servlet-name> 
    <servlet-class> 
     javax.faces.webapp.FacesServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>FacesServlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>FacesServlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>ExtensionsFilter</filter-name> 
    <filter-class> 
     org.apache.myfaces.webapp.filter.ExtensionsFilter 
    </filter-class> 
    <init-param> 
     <param-name>uploadMaxFileSize</param-name> 
     <param-value>10m</param-value> 
    </init-param> 
    <init-param> 
     <param-name>uploadThresholdSize</param-name> 
     <param-value>100k</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>ExtensionsFilter</filter-name> 
    <servlet-name>FacesServlet</servlet-name> 
</filter-mapping> 

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<!-- JBoss EL allows method parameters --> 
<context-param> 
    <param-name>com.sun.faces.expressionFactory</param-name> 
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> 
</context-param> 

我test.xthml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:t="http://myfaces.apache.org/tomahawk" 
    xmlns:sf="http://www.springframework.org/tags/faces" 
    xmlns:x="http://myfaces.apache.org/extensions" 
    template="template.xhtml"> 

<ui:define name="header"> 
    <h1>List of Matches</h1> 
</ui:define> 

<ui:define name="content"> 
<f:view> 
<html lang="en"> 
    <head> 
     <title>File upload test</title> 
    </head> 
    <body> 
     <h:form id="uploadForm" enctype="multipart/form-data"> 
      <h:panelGrid columns="3"> 
       <h:outputLabel for="file" value="Select file" /> 
       <t:inputFileUpload id="file" value="#{myBean.uploadedFile}" storage="file" required="true" /> 
       <h:message for="file" style="color: red;" /> 

       <h:panelGroup /> 
       <h:commandButton value="Submit" action="#{myBean.submit()}" /> 
       <h:message for="uploadForm" infoStyle="color: green;" errorStyle="color: red;" /> 
      </h:panelGrid> 
     </h:form> 

     <h:outputLink value="file/#{myBean.fileName}" rendered="#{myBean.fileName != null}"> 
      Download back 
     </h:outputLink> 
    </body> 
</html> 
</f:view> 
</ui:define> 
</ui:composition> 

MyBean.java

package managedbean; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 

import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 

import javax.faces.bean.ManagedBean; 
import org.apache.commons.io.FilenameUtils; 
import org.apache.commons.io.IOUtils; 
import org.apache.myfaces.custom.fileupload.UploadedFile; 

@ManagedBean (name = "myBean") 
public class MyBean { 

private UploadedFile uploadedFile; 
private String fileName; 

public void submit() { 

    String prefix = FilenameUtils.getBaseName(uploadedFile.getName()); 
    String suffix = FilenameUtils.getExtension(uploadedFile.getName()); 

    File file = null; 
    OutputStream output = null; 

    try { 
     file = File.createTempFile(prefix + "_", "." + suffix, new File("/Users/")); 
     output = new FileOutputStream(file); 
     IOUtils.copy(uploadedFile.getInputStream(), output); 
     fileName = file.getName(); 


    } catch (IOException e) { 

     if (file != null) file.delete(); 

     e.printStackTrace(); 
    } finally { 
     IOUtils.closeQuietly(output); 
    } 
} 


public UploadedFile getUploadedFile() { 
    return uploadedFile; 
} 

public String getFileName() { 
    return fileName; 
} 


public void setUploadedFile(UploadedFile uploadedFile) { 
     this.uploadedFile = uploadedFile; 
} 

} 

我的完整的堆棧跟蹤,當我提交

[#|2011-03-18T22:00:08.768+0100|WARNING|oracle-glassfish3.1|javax.enterprise.resource.webcontainer.jsf.lifecycle|_ThreadID=19;_ThreadName=http-thread-pool-8080(4);|#{myBean.submit()}: java.lang.NullPointerException 
javax.faces.FacesException: #{myBean.submit()}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 37 more 
Caused by: java.lang.NullPointerException 
    at managedbean.MyBean.submit(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:274) 
    at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
    at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 38 more 
|#] 

[#|2011-03-18T22:00:08.774+0100|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=84;_ThreadName=http-thread-pool-8080(4);|StandardWrapperValve[FacesServlet]: PWC1406: Servlet.service() for servlet FacesServlet threw exception 
javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: java.lang.NullPointerException 
    at managedbean.MyBean.submit(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:274) 
    at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
    at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 38 more 
|#] 

就像我說的,這只是我放在一起的教程;該文件的名稱顯示在文本字段中,但是在提交時,只有該例外。

在此先感謝。

編輯:我只是認爲這可能是有用的知道,與1.6.0jdk工作。

+0

得到它與primefaces現在的工作,但如果上面請隨時回答別人解決了這個問題,我RLY想知道,爲什麼它不工作。 – ichistmeinname 2011-03-20 20:27:15

回答

0

我有同樣的問題,但在Linux中工作,並在Windows中失敗。要通過這個問題,我發現這個解決方案: 不要忘了添加「enctype」屬性到你的窗體,並將此屬性設置爲「multipart/form-data」。

<h:form enctype="multipart/form-data"> 

查看更多在這裏:Source

+0

如果你看看我的代碼,你會看到我做到了。所以,這不是問題。 – ichistmeinname 2011-07-02 10:28:43

+0

大聲笑,你說得對,嗯,這對我來說已經夠了。當我使用ajax4jsf時,我複製了這個問題,因爲一些瀏覽器對這個輸入字段有限制...但似乎你沒有在你的例子中使用任何javascript。 – chavocarlos 2011-07-14 21:39:18

相關問題