【问题标题】:JSF Upload File FailingJSF 上传文件失败
【发布时间】:2012-03-13 05:44:53
【问题描述】:

我已经完成了表格的这一部分

<td>
   <h:form enctype="multipart/form-data">  
      <p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload(event)}"  
                    mode="advanced"  
                    update="messages"   
                    multiple="true"  
                    sizeLimit="2000000"   
                    allowTypes="/(\.|\/)(pdf|doc?x|xls?x)$/"/>  
       <p:growl id="messages" showDetail="true"/>  
    </h:form>
</td> 

类中的这个事件处理程序:

    public class UploadBean {

    /** Creates a new instance of UploadBean */
    public UploadBean() {
    }
    private static final int BUFFER_SIZE = 6124;
    public void handleFileUpload(FileUploadEvent event) {

    ExternalContext extContext = FacesContext.getCurrentInstance().
                                 getExternalContext();
    File result = new File(extContext.getRealPath
     ("//WEB-INF//upload") + "//" + event.getFile().getFileName());

try {
    FileOutputStream fileOutputStream = new FileOutputStream(result);

    byte[] buffer = new byte[BUFFER_SIZE];

    int bulk;
    InputStream inputStream = event.getFile().getInputstream();
    while (true) {
      bulk = inputStream.read(buffer);
      if (bulk < 0) {
             break;
             }
      fileOutputStream.write(buffer, 0, bulk);
      fileOutputStream.flush();
      }

      fileOutputStream.close();
      inputStream.close();

      FacesMessage msg = new FacesMessage("Succesful", 
          event.getFile().getFileName() + " is uploaded.");
      FacesContext.getCurrentInstance().addMessage(null, msg);

      } catch (IOException e) {

      FacesMessage error = new FacesMessage("The files were not uploaded!");
      FacesContext.getCurrentInstance().addMessage(null, error);
      }
    }
}

现在我从一个网站得到它的处理方法。我不确定为什么上传失败。我觉得没问题。也许我错过了什么?所以控件出现在我的页面上,我可以选择文件,但是上传进度条会快速进行......没有咆哮通知显示,当然也没有上传文件。 谢谢,

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    来自文档(假设使用 Primefaces)
    首先要做的是配置解析多部分请求的文件上传过滤器。 FileUpload 过滤器应该映射到 Faces Servlet。

        <filter>
            <filter-name>PrimeFaces FileUpload Filter</filter-name>
            <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>PrimeFaces FileUpload Filter</filter-name>
            <servlet-name>Faces Servlet</servlet-name>
        </filter-mapping>
    

    希望您不会错过此设置。

    也不确定你的代码中有什么事件

    <p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload(event)}" .....
    

    【讨论】:

    • 不,我没有将它包含在我的 XML 中,因为每次我这样做时,它都会崩溃。我不知道为什么。而且我找不到如何在 XML 文件中添加此过滤器的完整示例。正如我所说,代码是从声称它有效的网站复制的......我应该删除它吗?
    • 我在 PF 文档中使用它,在 tomcat 7.X 上使用 PF 3.0、JSF 2.1.4,它对我有用。它崩溃了错误是什么,我想你也需要一些 apache 通用库,即 commons-io-X.jar,commons-fileupload-X.jar 。
    猜你喜欢
    • 2013-06-09
    • 2012-03-18
    • 1970-01-01
    • 2013-07-09
    • 2020-06-12
    • 2012-05-31
    相关资源
    最近更新 更多