jsf 2.0 Primefaces 多个 Fileupload 不记得上传的文件

2023-12-02

我已经在这篇文章中修复了一些其他问题(fileuploadhandler 现在正在工作),我的代码如下:

Bean:

@ManagedBean
@ViewScoped
public class TempBean implements Serializable{

    private static final long serialVersionUID = -70753689043016662L;
    private List<String> names; //to remember which files have been uploaded

    public void load(){
        System.out.println("@prerender");
    }

    public TempBean() {
        super();
        System.out.println("@constructor");
        names = new ArrayList<String>();
    }

    @PostConstruct
    public void pc(){
        System.out.println("@postconstruct");
    }

    public void handleFileUpload(FileUploadEvent event) { 
        String filename = event.getFile().getFileName();
        System.out.println("INCOMING FILE: " + filename);
        names.add(filename);

        if(!names.isEmpty()){
            System.out.println("Files uploaded:");
            for(String n : names){
                System.out.println("# " + n);
            }
            System.out.println();
        }
   }  

    public List<String> getNames() {
        return names; 
    }

    public void setNames(List<String> names) {
        this.names = names;
    }

}

xhtml 页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui" >

    <h:head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </h:head>

    <f:event type="preRenderView" listener="#{tempBean.load}" />
    <h:body>

        <h:form>
            <p:fileUpload
                fileUploadListener="#{tempBean.handleFileUpload}"
                mode="advanced" dragDropSupport="true" multiple="true" update=":overview" />
        </h:form>

        <h:panelGroup id="overview">
            <ui:repeat var="file" value="#{tempBean.names}">
                #{file} <br/>
            </ui:repeat>
        </h:panelGroup>

    </h:body>
</html>

我现在面临的问题(或者我提出一个新问题的原因)是,当我上传多个(例如三个)文件时,只有其中一个被附加到空列表中。当我重新上传剩余的两个文件时,只有其中一个被附加到列表中。

有趣的是,为每个文件调用handleFileUpload(...)...

这是我同时上传三个文件时的控制台输出:

@constructor
@postconstruct
@prerender
INCOMING FILE: test1.jpe
INCOMING FILE: test3.jpe
Files uploaded:
INCOMING FILE: test2.jpe
# test3.jpe
-END OF LIST-
Files uploaded:
# test1.jpe
Files uploaded:
# test2.jpe
-END OF LIST-
-END OF LIST-
@prerender
@prerender
@prerender

我该怎么做才能使文件上传组件正常运行?这是一个错误还是 ajax 问题?

这是我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0" >

  <display-name>TestProjekt</display-name>
  <welcome-file-list>
    <welcome-file>test.xhtml</welcome-file>
  </welcome-file-list>
  <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>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping> 
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
        <param-value>resources.application</param-value>
    </context-param>
    <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>facelets.SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>primefaces.UPLOADER</param-name>
        <param-value>commons</param-value>
    </context-param>

  <context-param>
    <description>
    This parameter tells MyFaces if javascript code should be allowed in
    the rendered HTML output.
    If javascript is allowed, command_link anchors will have javascript code
    that submits the corresponding form.
    If javascript is not allowed, the state saving info and nested parameters
    will be added as url parameters.
    Default is 'true'</description>
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>

      <context-param> 
        <description> 
        If true, rendered HTML code will be formatted, so that it is 'human-readable'
        i.e. additional line separators and whitespace will be written, that do not
        influence the HTML code.
        Default is 'true'</description>
        <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
        <param-value>true</param-value>
      </context-param>

      <context-param>
        <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
        <param-value>false</param-value>
      </context-param>

      <context-param>
        <description>
        If true, a javascript function will be rendered that is able to restore the
        former vertical scroll on every request. Convenient feature if you have pages
        with long lists and you do not want the browser page to always jump to the top
        if you trigger a link or button action that stays on the same page.
        Default is 'false'
        </description>
        <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
        <param-value>true</param-value>
      </context-param>


    <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>C:\tmp</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

</web-app>

和我的 faces.config:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0"> 

</faces-config>

这是由 JSF 实现 MyFaces 2.2.0-20130426 中的错误引起的。

当我尝试目前可用的 MyFaces 2.2.0-beta 时,它对我有用myfaces.apache.org和 Mojarra 2.2.4 目前可用javaserverfaces.java.net.

正如对该问题的评论所证实的那样,它也适用于您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsf 2.0 Primefaces 多个 Fileupload 不记得上传的文件 的相关文章

  • Drupal:需要上传文件吗?

    由于某种原因 当我尝试要求上传文件时 我的表单中断了 这是它的代码 form id upload form form form id array type gt fieldset description gt t This is a uti
  • d3 v4 使用 TypeScript 进行拖放

    我正在使用 D3 库 v4 和 Angular2 我想拖放 svg 元素 我有一个代码 item call d3 drag on start dragStarted on drag dragged on end dragEnded and
  • 需要 Spring 3 JSF 2 集成示例

    我想将 Spring 3 Web Flow 2 JSF 2 集成在一起 我需要您向我推荐一个好的教程或示例 提前致谢 UPDATE 我使用了以下示例 它对我来说运行良好 没有任何问题 http www mkyong com jsf2 jsf
  • 在 Struts 2 中使用单个文件标签上传多个文件

    我想使用单个 Struts 2 文件标签上传多个文件 就像在 Gmail 中一样 我们使用 CTRL 键来选择多个文件来附加多个文件 我知道如何上传多个文件 但我想使用单个文件标签 我在一个小画廊应用程序中上传多个文件 如果您的操作已设置为
  • Sharepoint、ajax 和页面标题

    我对共享点和 ajax 功能有奇怪的问题 我们在 webpart 中放置了一个 UpdatePanel 当发生部分回发时 页面标题会丢失 我们发现临时的部分解决方案是将标题元素写入一行 并且不使用其中的任何空格或控件 甚至不使用文字控件 但
  • A:Visited 未检测到 AJAX 链接

    我注意到a visited样式不适用于通过 JavaScript 请求的链接 但是 在标准用户单击时 会立即和随后的刷新时注册访问的完全相同的链接 我不确定这是否是独一无二的jQuery 移动 http forum jquery com t
  • 我可以将 Outlook 中的项目拖到我的 SWT 应用程序中吗?

    背景 我们基于 Eclipse RCP 3 6 的应用程序允许人们拖动文件进行存储 处理 当从文件系统中拖动文件时 这种方法可以正常工作 但当人们直接从 Outlook 中拖动项目 消息或附件 时 这种方法就不行了 这似乎是因为 Outlo
  • 在 UWP 中拖放到银行帐户列表中

    我有一个本地银行的通用 Windows 应用程序 我正在处理汇款视图 他们需要使用 UWP 应用程序中的拖放功能将资金从一个帐户转移到另一个帐户 我已经制作了动画部分 但在将列表项拖放到 帐户至 列表后需要帮助 I ll attach a
  • 使用谷歌图表API并通过ajax在线索提示中显示内容

    我有一个jsp页面 它使用google图表api以条形图的形式显示数据 Here https google developers appspot com chart interactive docs gallery columnchart是
  • 使用 Netbeans 7.0.1、Maven 在 JSF2 中打包复合组件

    我在 Internet 上阅读了很多有关将 JSF2 复合组件打包到 JAR 文件中的内容 有人知道我在哪里可以找到 JAR 的结构 规格 官 方文档等 有没有办法使用 Netbeans IDE 来做到这一点 或者 Maven 是否存在原型
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • Internet Explorer 不渲染从 JQuery ajax 帖子返回的 html

    我有一个带有输入框的页面 其 onkeyup 根据输入的内容 搜索字段 触发 JQuery ajax 帖子 ajax 调用回发的 html 应该填充页面上的另一个 div 这是 jquery ajax 帖子 var o me results
  • ajax调用后如何停止刷新页面?

    ajax 调用后我无法停止刷新页面 我尝试过放置 e preventDefault 并返回 false 但我的页面又刷新了 我不知道代码有什么问题或者什么 请帮助我在ajax调用后停止刷新页面 解决这个问题对我来说会有很大的帮助 提前致谢
  • 如何阻止用户重复单击 jQuery AJAX 调用?

    我有一个包含以下脚本的网页 JavaScript function LinkClicked var stage this id var stop ContentPlaceHolderMenu txtDate val var nDays Co
  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • 作出选择之后、提交上传之前的 asp.net FileUpload 事件

    我想显示通过 FileUpload 控件的浏览按钮选择的文件的大小 理想情况下 该值在用户选择文件后但在单击 上传文件 按钮之前立即显示 我有一个网络表格 按钮看起来像这样
  • HTML5 文件 API 和 AJAX 上传分块问题

    我编写了一个带有单独进度的拖放多个文件上传等 除了一件事之外 它工作得非常好 上传较大文件时 有时浏览器会锁定 直到上传完成 我认为这是因为该文件存储在浏览器的内存中并占用了浏览器可用的所有资源 我想知道 是否可以逐段读取文件并在读取时通过
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • SSIS C# 脚本不兼容

    我最近接管了基于 SSIS ETL 的流程 由于一些许可问题 我不得不从 Data Tools 2013 升级到 2015 大部分项目都在升级中幸存下来并且运行良好 然而 在两个包中 我有一个非常简单的 C 方法 脚本转换 来解析一些导致一
  • 何时使用接口而不是抽象类,反之亦然?

    这可能是一个通用的 OOP 问题 我想根据接口和抽象类的用法对它们进行一般比较 什么时候需要使用接口 什么时候需要使用抽象类 我写了一篇关于此事的文章 抽象类和接口 总结 当我们谈论抽象类时 我们正在定义对象类型的特征 指定物体是什么 当我
  • AngularJS:循环 POST 请求并将每个索引传递到相关响应中

    我正在尝试使用 AngularJS 执行多个 http POST 请求 并且我需要创建一个成功完成请求的对象 如下所示 var params 1 2 3 url i done for i in params url dir params i
  • 为 StackPane 对象创建具有绝对坐标的路径过渡

    OrangeBlock是一个橙色块 里面有文字 它被实现为StackPane其中包含矩形顶部的文本 这种方法在StackPane 的文档 我已经放置了一个OrangeBlock在坐标 100 80 处 现在我正在尝试使其顺利移动到某个目标坐
  • 如何从远程 url 下载 mp3 文件?

    我将我的网站重定向到一个只有 mp3 文件正在流式传输的 URL 并且我希望将该文件下载到本地计算机 我怎样才能做到这一点 我已经搜索过 google 和 stacksoverflow 但这些解决方案对我不起作用 我找不到针对我的具体问题的
  • 甲骨文声明

    表记录如下 D HOME DOC FILE 2001 12 TT 12S2Q99 EE EE1 pdf D HOME DOC FILE 2002 02 TT 12S2Q94 EE EE1 xml D HOME DOC FILE 2005 0
  • 更改滚动图像

    我的网站上有一个固定图像 该图像应该是 动画的 这意味着动画的单个帧应该被迭代 因此 我们的想法是拥有一个图像数组 每次用户滚动时 都会迭代该数组并且显示的图像会发生变化 从而创建动画 我不太习惯使用 JS 因此我真的不知道从哪里开始 我唯
  • 如何在Delphi 7中获取GIT?

    我试图使用以下代码 Delphi 获取全局接口表 uses Comobj ActiveX var cGIT IGlobalInterfaceTable NIL const CLSID StdGlobalInterfaceTable TGUI
  • 正则表达式匹配字符串最后一次出现后的所有内容

    正在努力寻找一种方法来做到这一点 因此感谢任何帮助 在单行上有简单的文本 并希望匹配最终之后的所有文本 tag 我在 Open Office 中使用正则表达式 所以我需要返回直接匹配而不是 JavaScript 数组 字符串看起来像这样 p
  • Python 中使用正则表达式进行字数统计

    使用正则表达式计算文档中英文单词的正确方法是什么 我尝试过 words re findall w open text txt read lower len words 但我似乎遗漏了几个单词 与 gedit 中的字数相比 我做得对吗 多谢
  • 如何用haml每隔几个div插入一个块?

    我想插入一个div row每三个街区wrap three span一起完成以下 haml 片段 但是这段代码插入了一个 div class row div 而不是包裹 span4 data apps applications each wi
  • Structr、现有 Neo4j 安装和 cypher shell

    我的 Windows 7 机器上有以下安装 Neo4j 社区版 3 1 0 结构 ui 2 0 1 我首先安装了 Neo4j 然后安装了 Structr UI 我能够运行 Structr UI 并创建架构 添加节点和关系 我有以下问题 我猜
  • Wix Burn - 自定义模板

    有没有办法改变安装程序中红色的 CD 图片 这是 Burn 项目的代码
  • HDFS Thrift服务器返回本地FS的内容,而不是HDFS

    我正在使用 Thrift 访问 HDFS 这是 HDFS 上预期的 也是正确的 内容 hadoop hdp namenode 01 hadoop fs ls Found 3 items drwxr xr x hadoop supergrou
  • 为什么我的 double 可以包含低于机器 epsilon 的值?

    我正在使用双精度求解方程 我得到 7 07649e 17作为解决方案而不是0 我同意它足够接近 我可以说它是相等的 但是我读到 C 双精度类型的机器 epsilon 是2 52这比我得到的值要大 那么为什么我的值比机器 epsilon 低呢
  • 如何在Python中生成随机字符串?

    如何在 Python 中创建随机字符串 我需要它先是数字 然后是字符 重复直到迭代完成 这就是我创建的 def random id length number 0123456789 alpha abcdefghijklmnopqrstuvw
  • 如何在 Android 中获取电话号码

    我想知道电话号码 我使用了这个示例代码 TelephonyManager tm TelephonyManager getSystemService TELEPHONY SERVICE String strphonenumber tm get
  • 使用 PhaseListener 代替 Servlet Filter 进行授权的限制

    我目前正在使用PhaseListener如下进行用户授权 private PhaseId phaseId PhaseId RESTORE VIEW Override public void afterPhase PhaseEvent eve
  • 浏览器控制台中需要 Javascript

    在浏览器控制台窗口中输入 javascript 时 1 以下代码有效 alert hi 2 以下则不然 function var scr document createElement script scr src http www myra
  • jsf 2.0 Primefaces 多个 Fileupload 不记得上传的文件

    我已经在这篇文章中修复了一些其他问题 fileuploadhandler 现在正在工作 我的代码如下 Bean ManagedBean ViewScoped public class TempBean implements Serializ