【问题标题】:Primefaces multi file selection not working in IE11 browserPrimefaces多文件选择在IE11浏览器中不起作用
【发布时间】:2016-02-25 13:25:58
【问题描述】:

我正在尝试在 IE11 浏览器中使用 primefaces5.2 实现多文件上传,但它不允许我一次选择多个文件。

同样的东西在 chrome 浏览器中运行良好。

已配置的罐子:

javax.faces.jar(JSF2.1.9),Primefaces5.2.jar,Weblogic 12c

Web.xml:

<web-app>
  <servlet>
     <servlet-name>Faces Servlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
     <servlet-name>Faces Servlet</servlet-name>
     <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>
<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>auto</param-value>
</context-param>
 <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>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

文件上传.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
 </h:head>
<h:body>
     <h:form enctype="multipart/form-data" >
            <p:fileUpload value="#{fileUploadBean.file}" mode="advanced" multiple="true"
                            fileUploadListener="#{fileUploadBean.fileUploadListener}"></p:fileUpload>
    </h:form>
  <h:body>
 </html>

FileUploadBean.java

 @ManagedBean
 @SessionScoped
 public class FileUploadBean {
    UploadedFile file;

    public UploadedFile getFile() {
    return file;
     }

    public void setFile(UploadedFile file) {
     this.file = file;
     }

   public void fileUploadListener(FileUploadEvent e){
    // Get uploaded file from the FileUploadEvent
    this.file = e.getFile();
    // Print out the information of the file
    System.out.println("Uploaded File Name Is :: "+file.getFileName()     +" ::    Uploaded File Size :: "+file.getSize());
    }

【问题讨论】:

  • 您使用哪种浏览器?
  • @ErkanErol 我正在 IE11 浏览器上测试这段代码。

标签: jsf jsf-2 primefaces weblogic12c mojarra


【解决方案1】:

在 IE 11 中,我的 Web 应用程序处于兼容模式,我从兼容模式中删除了 Web 应用程序,现在我可以选择多个文件。

【讨论】:

    【解决方案2】:

    请移除 value 属性。在高级模式下,Primefaces 会为每个文件调用监听器,并且该值不是必需的。

      <p:fileUpload  mode="advanced" multiple="true" 
          fileUploadListener="#{fileUploadBean.fileUploadListener}">
      </p:fileUpload>
    

    您应该使用列表而不是单个文件

    ArrayList<UploadedFile> files = new ArrayList<UploadedFile>();
    

    并在方法中将文件添加到列表中

    files.add(e.getFile());
    

    此外,请确保 SessionScoped 是最适合您的范围。因为,大多数时候使用 ViewScoped 会更好。

    【讨论】:

    • 删除了 value 属性但没有改变,我无法一次选择多个文件。它适用于 IE11 吗?
    • 你能把参数 UPLOADER 从 auto 改成 common 吗?
    • 我也尝试了该选项,但仍然无法正常工作(上下文参数值为 commons)。
    • 我一次只能选择一个文件(为了上传多个文件,我多次点击文件选择按钮)。在这种情况下,我可以上传多个文件,但是多个一次文件选择是我必须实施的,但它不起作用。
    • 为了能够一次选择多个文件,必须在生成的 html 输出中设置“multiple”属性。但是我不明白为什么代码不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2012-05-23
    • 2020-08-30
    相关资源
    最近更新 更多