Trinidad/ADF Faces、文件上传、EOFException

2024-03-23

我在 Tomcat 8.5 服务器上的 web.xml-version 3.1 中使用 JSF 2.3 (Mojarra 2.3.3)、Trinidad (2.2.1) 及其文件上传组件 (tr:inputFile)。

我收到以下异常,并且没有有效的上传文件(即“值”绑定 bean 属性保持为空):

java.io.EOFException: null
        at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler._readLine(MultipartFormHandler.java:253) ~[trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler._readLine(MultipartFormHandler.java:237) ~[trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler._skipBoundary(MultipartFormHandler.java:223) ~[trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.<init>(MultipartFormHandler.java:102) ~[trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.<init>(MultipartFormHandler.java:75) ~[trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl.beginRequest(FileUploadConfiguratorImpl.java:139) [trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl._startConfiguratorServiceRequest(GlobalConfiguratorImpl.java:763) [trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.beginRequest(GlobalConfiguratorImpl.java:244) [trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:178) [trinidad-impl-2.2.1.jar:2.2.1]
        at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) [trinidad-api-2.2.1.jar:2.2.1]

(信息:Tomcat 6 或 Weblogic 10 上带有 Trinidad 1.2.14 和 web.xml-version 2.5 的 JSF 1.2 版本不存在此问题。)

在寻找解决方案时,我发现这似乎不仅影响我的具体情况,而且还影响:

  • ADF 面(至少 12.x)
  • 特立尼达2.1
  • JSF 2.x 概述
  • 野蝇 (10.1)

为了寻找答案,我开发了一个想要分享的解决方案。

使用 JSF 的<h:inputFile>(自 JSF 2.2 起)而不是<tr:inputFile>.
您可以继续使用<tr:form usesUpload="true">,但请参阅下面的注释。
在支持 bean 中,您只需替换org.apache.myfaces.trinidad.model.UploadedFile with javax.servlet.http.Part并使用getSubmittedFileName()代替getFileName().

这样,文件上传已经可以工作了,但是EOFException仍然发生并被记录(但在内部被忽略)。
为了防止需要的TrinidadFilter(配置在web.xml)从处理文件上传中,添加您自己的javax.servlet.Filter(我猜大多数应用程序已经有一个)并将其放入doFilter():

request.setAttribute("org.apache.myfaces.trinidadinternal.config.upload.FileUploadUtils.PROCESSED", Boolean.TRUE);

当然,你的过滤器必须被执行before the TrinidadFilter,因此要么使用更广泛的过滤器映射,要么将其放在 TrinidadFilter 之前web.xml.

补充笔记:

  • 使用时<tr:form> the <h:inputFile>将输出错误的错误/警告“文件上传组件需要一个 enctype 为 multipart/form-data 的表单”通过 FacesMessage - 但是not for javax.faces.PROJECT_STAGE生产。
    您可以在开发或使用时忽略它<h:form enctype="multipart/form-data">反而。但请注意:<h:form>是一个命名容器并且<tr:form>不是,因此寻址输入元素不同(hformId:inputId而不是简单的inputId)
  • If your <tr:inputFile>被用在一个内部<tr:panelFormLayout>, 放在<h:inputFile>里面一个<tr:panelLabelAndMessage>并将标签放在那里。
  • CSS 样式af|inputFile::content还必须这样做input[type="file"].

也可以看看:

  • https://stackoverflow.com/a/27681292/5074004 https://stackoverflow.com/a/27681292/5074004
  • https://developer.jboss.org/thread/274824?_sscc=t https://developer.jboss.org/thread/274824?_sscc=t
  • http://myfaces.10567.n7.nabble.com/Trinidad-File-upload-issue-td30231.html http://myfaces.10567.n7.nabble.com/Trinidad-File-upload-issue-td30231.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Trinidad/ADF Faces、文件上传、EOFException 的相关文章

随机推荐

  • MSB3245:无法解析此引用。无法找到程序集

    当我使用 Azure DevOps 构建代码时 收到以下错误消息 同样的代码 当我在本地构建时 我能够成功构建它 警告 MSB3245 无法解析此引用 无法找到程序集 Azure Core Version 1 20 0 0 Culture
  • 异步方法中的 Await 与 Task.Result [重复]

    这个问题在这里已经有答案了 执行以下操作有什么区别 async Task
  • Prolog:消除查询中的重复

    我一直在尝试编写一个简单的代码 其行为方式如下 hasCoppiesOf X a b a b a b a b X a b X a b a b X a b a b a b a b And hasCoppiesOf a b a b a b a
  • 未处理的异常:MissingPluginException(在通道 flutter_barcode_scanner 上未找到方法 scanBarcode 的实现)

    我正在尝试通过以下方式创建条形码扫描仪 https pub dev packages flutter barcode scanner install https pub dev packages flutter barcode scanne
  • 在 RESTful API 中存储身份验证令牌而不使用 HTTP 会话

    我正在构建一个具有多个服务器的 RESTful API 我想知道是否可以将访问令牌存储在中央数据库服务器中 然后对于每个请求 通过查询数据库然后执行操作来验证此访问令牌是否有效给予 如果我使用会话来完成这项工作 它会变得非 RESTful
  • Linq to Nhibernate 批量更新查询等效项?

    不确定我是否在这里遗漏了任何东西 基本上 我正在寻找 Linq to Nhibernate 来执行以下 SQL 语句 update SomeTable set SomeInteger SomeInteger 1 where SomeInte
  • 有人可以帮助我一些 JDBC 初学者吗?

    作为刚接触 Java 的 C 开发人员 我认为简单地显示一些 C 代码可能是最简单的 这样我就可以看到等效的 Java JDBC 调用是什么 String myConnectionString String mySql select nam
  • Angular 中令牌验证的最佳方法

    在使用 AngularJS 进行的 Web 应用程序开发中 使用令牌验证来进行身份验证 那么进行此验证的最佳方法是什么 例如 每次进行路由转换时都验证令牌 为此 每次我想验证时 我都必须拨打休息电话 通过一次休息调用仅验证令牌一次 然后将令
  • document.cookie 未返回所有 cookie

    我正在尝试使用以下方式读取我的域设置的所有 cookiedocument cookie我注意到 它只返回 csrftoken 和另一个值 我的目标是阅读sessionid从饼干 please see the below screenshot
  • 如何交互式地挑选

    我已经在一个分支上黑了一段时间了 这个分支很快就不会被合并了 但无论如何 我还是想将一些提交合并到 master 中 有没有办法获得交互式的挑选 它将显示提交及其更改 然后让我选择我真正想要挑选的内容 您可以使用提交图来做到这一点 gitk
  • Ruby 和修改 Float 实例的 self

    我想更改浮点实例的自身值 我有以下方法 class Float def round by precision self 10 precision round to f 10 precision end end 我想添加 round by 方
  • c++0x_warning.h:31:2:错误:

    我正在尝试创建一个文件并收到此错误 我是新手 有人能帮我一下吗 usr include c 4 6 bits c 0x warning h 32 2 error error This file requires compiler and l
  • Cocos2d 3.0中如何获取winSize

    我在Cocos2d 1 0和Cocos2d 2 0中使用了以下代码 但在Cocos2d 3 0中似乎找不到 CGSize s CCDirector sharedDirector winSize 如何在Cocos2d 3 0中获取屏幕尺寸 您
  • 如何使用 Unity 将基于 2D 数组的图块实例化到平台游戏中?

    我正在构建一个非常简单的平台游戏 使用 2D 数组来构建基于它的地图 我想要两个简单的目标 但目前还没有找到答案 确保相机为 16 9 并且我的场景将 100 显示在其中 像在数组中一样构建 2D 平台图块集 我的环境 Unity 5 5
  • C# 编码指南 [重复]

    这个问题在这里已经有答案了 可能的重复 C 编码标准 最佳实践 https stackoverflow com questions 14967 c coding standard best practices 您推荐哪些最流行 最合理且最详
  • 增加 gradle 的超时时间以获得 Maven 依赖

    我正在尝试通过以下方式从 Maven 获取 jar 依赖项grails 3 1 5 gradle依赖解析 如何增加 gradle 获取 Maven 依赖项所需的超时时间 当然 我已经看到依赖项需要更长的时间才能下载 但是我如何配置 grad
  • 从 flutter 应用程序中的 fireStore 获取带有索引的列表

    我正在尝试从 firestore 获取列表 但我遇到了索引问题 这是列表上普通项目的结构 每个对象都包含一个项目列表 class RestaurantFoodList final String id final String title L
  • 如何创建带有背景图像的倾斜透明形状?

    I want to achieve something like this it has a background image https imgur com cSde7ff I only able to make a slanted di
  • 由于 Javadoc 错误而无法构建 Maven 项目?

    有没有人遇到过类似的 Maven 错误 如下所示 由于以下错误 我无法构建我的项目 在我开始编写代码之前 一切都工作正常 我什至没有处理下面定义的接口 它似乎与 Javadoc 有关 ERROR Failed to execute goal
  • Trinidad/ADF Faces、文件上传、EOFException

    我在 Tomcat 8 5 服务器上的 web xml version 3 1 中使用 JSF 2 3 Mojarra 2 3 3 Trinidad 2 2 1 及其文件上传组件 tr inputFile 我收到以下异常 并且没有有效的上传