Использование IFrame внутри составного компонента JSF приводит к ошибке - PullRequest
1 голос
/ 08 июня 2011

Я пытаюсь реализовать File Uploader, пока загрузка файла PF 3.X не станет стабильной. Я использую 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 генерирует исключение nullException в событии RestoreViewPhase? Я использую Primefaces + Mojarra 2.0.3. Это ошибка в Мохарре? Спасибо!

1 Ответ

1 голос
/ 08 июня 2011

Согласно выпуску 1764 , это было исправлено в Мохарре 2.1.1.Обновите соответственно.

...