2011-08-24 44 views
0

我試圖用豐富的上傳文件:文件上傳componenet.When我試圖上傳的文件,它產生的錯誤, 的錯誤是RichFaces的文件上傳錯誤

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) 

請幫我解決這個問題。

回答

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這樣的消息「上傳的文件在請求正文中丟失」或類似的,但ala) 。

如果你想使用RichFaces文件上傳功能,那麼你真的必須從web.xml刪除戰斧的ExtensionsFilter。您只會錯過<t:inputFileUpload>功能和特定look'n'feel組件的一些次要功能(腳本/樣式表)。其他戰斧組件應該保持正常工作。

0

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>