ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

春季-Primefaces文件上传仅适用于要上传的第一个文件

2019-11-01 01:20:49  阅读:207  来源: 互联网

标签:file-upload jsf primefaces web-xml spring


我正在使用Primefaces,但fileuploader出现问题.问题是,它与我上传的第一个文件(调用fileUploadListener且java方法上传该文件)正常工作,但是如果我尝试上传另一个文件,则不再调用该侦听器,并且永远不会触发java方法.如果刷新页面,则可以上传另一个文件,但是如果我尝试上传第二个文件,则同样会发生.

xhtml文件中的代码:

<p:tab id="eConsentTabPanel" title="Informed Consent" disabled="#{patientHandlerAction.patientTabsStatus}">
  <h:form id="eConsentForm" enctype="multipart/form-data">
     <h:panelGrid id="eConsentPanelGrid">
        <p:fileUpload fileUploadListener="#{patientHandlerAction.handleFileUpload}" 
                      mode="advanced"
                      update="messages"
                      multiple="true"
                      auto="true"
                      sizeLimit="20971520"
                      label="Select File"
                      allowTypes="/(\.|\/)(gif|jpe?g|png|pdf|doc?x)$/"/>
        <p:growl id="messages" showDetail="true"/>  
     </h:panelGrid>
  </h:form>  
</p:tab>

Java bean文件中的代码:

public void handleFileUpload(FileUploadEvent event) {

   ExternalContext extContext=FacesContext.getCurrentInstance().getExternalContext();
   String filename = FilenameUtils.getName(event.getFile().getFileName());
   File result = new File(extContext.getRealPath("//uploaded//" + filename));

   try {
      FileOutputStream fileOutputStream = new FileOutputStream(result);

      byte[] buffer = new byte[6124];

      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();

      messageTitle = "Message";
      messageBody = "The file" + event.getFile().getFileName() + " was succesfully uploaded!";

      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, messageTitle, messageBody));

   }

   catch (IOException e) {
      e.printStackTrace();

      messageTitle = "Message";
      messageBody = "The file was not uploaded";

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

}

web.xml文件中的代码:

<filter>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <filter-class>
      org.primefaces.webapp.filter.FileUploadFilter
   </filter-class>
   <init-param>
      <param-name>uploadDirectory</param-name>
      <param-value>/HerEhrUploaded/temp</param-value>
   </init-param>
   <init-param>
      <param-name>thresholdSize</param-name>
      <param-value>20971520</param-value>
   </init-param>      
</filter>

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

解决方法:

我补充说:

event.getComponent().setTransient(false);

内部文件上传监听器方法,

public void handleUpload(FileUploadEvent event) {
    ....
}

很好

标签:file-upload,jsf,primefaces,web-xml,spring
来源: https://codeday.me/bug/20191031/1979839.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有