2011-06-07 67 views
1

我試圖實現一個文件上傳器,直到PF 3.X FileUpload變得穩定。我利用複合組件內的IFrame執行文件上傳。本質上,這...在JSF複合組件中使用IFrame生成錯誤

<p:layout position="center"> 
    <p:outputPanel layout="block"> 
     <iframe src="excel_uploader.xhtml" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" width="100%" height="300"> 
      <p style="font-size:12px">Your browser does not support iframes.</p> 
     </iframe> 
    </p:outputPanel> 
</p:layout> 

注意,包含的文件,excel_uploader.xhtml,是...

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.prime.com.tr/ui" 
    xmlns:nova="http://novartis.net/jsf/html"> 
<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <meta http-equiv="Expires" content="0" /> 

    <link href="./resources/app/css/master.css" rel="stylesheet" type="text/css" /> 
</h:head> 
<h:body> 
    <h:form enctype="multipart/form-data"> 
     <div style="width:750px"> 
       <p:messages /> 
       <div style="font-size:12px;padding-top:15px"> 
        <nova:inputFile id="file" value="#{excelUploader.file}" validator="excelFileValidator" /> 
        <p:commandButton ajax="false" actionListener="#{excelUploader.onUploadExcelFile}" value="Attach Smart Sheet" styleClass="input_datagrid_button" style="color:#ffffff;margin-left:0" /> 
       </div> 
       <div style="font-size:12px;padding-top:10px"> 
        Smart Sheet:&nbsp;<h:outputText styleClass="app_input_lbl_bold" value="#{excelUploader.fileName}" /> 
       </div> 
       <h:inputHidden id="upload_file_name" value="#{excelUploader.fileName}" /> 
     </div> 
    </h:form> 
</h:body> 
</html> 

,並要求範圍的支持豆,ExcelUploader.java,是...

@ManagedBean 
@RequestScoped 
public class ExcelUploader { 

// <editor-fold desc="Class-Level Variables"> 
private File _File; 
private String _FileName; 
// </editor-fold> 

// <editor-fold desc="Properties"> 
public String getFileName() { 
    return _FileName; 
} 

public void setFileName(String value) {} 

public File getFile() { 
    return _File; 
} 

public void setFile(File file) { 
    this._File = file; 
} 
// </editor-fold> 

// <editor-fold desc="Methods"> 
public void onUploadExcelFile() { 
    if (this._File != null && this._File.length() > 0) 
     this._FileName = this._File.getName(); 
} 
// </editor-fold> 

} 

當我導航到複合部件,其是一個在一系列嚮導狀部件的,我得到以下錯誤:

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.NullPointerException 
at com.sun.faces.lifecycle.RestoreViewPhase.notifyAfter(RestoreViewPhase.java:288) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
at Novartis.OTM.Http.MultipartFilter.doFilter(MultipartFilter.java:70) 
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:277) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 
at java.lang.Thread.run(Thread.java:619) 

有人可以詳細闡述爲什麼Faces Servlet在RestoreViewPhase事件中拋出nullException?我正在使用Primefaces + Mojarra 2.0.3。這是莫哈拉的一個錯誤嗎?謝謝!

回答

1

根據issue 1764,這已在Mojarra 2.1.1中修復。相應升級。

+0

是的,我昨天通過將Mojarra升級到2.0.4(太害怕去2.1.1並打破兼容性)發現了這個問題。現在世界是對的,至少根據我的項目時間表。 :) – Chris 2011-06-09 15:21:38