【问题标题】:rich:fileUpload submits whole formrich:fileUpload 提交整个表单
【发布时间】:2015-02-15 17:45:39
【问题描述】:

考虑一下这段代码,它依赖于 JSF2 和 RichFaces 4.5.0 作为使用的组件库。

// some non-relevant attributes are omitted    
<rich:fileUpload fileUploadListener="#{bean.uploadListener}">
      <a4j:ajax event="uploadcomplete" render="imagePanel" immediate="true" />
</rich:fileUpload>

表单中的给定标签提交整个表单。例如,这不是我的预期行为。我希望组件只提交自身的表单属性并跳过同一表单中的其他表单值,例如 RichFaces 3 中的 ajaxSingle。

我对这个主题做了一些研究,但没有找到任何结论如何管理 fileUpload 组件的部分表单提交,特别是因为这个标签没有执行属性,就像在其他几个 jsf ajax 组件中一样。

我将不胜感激有关此案例的任何帮助,尤其是如何管理 fileUpload 组件仅将其自己的表单值提交给服务器。

【问题讨论】:

  • 你可以把它放在一个单独的表格中。它会破坏什么吗?
  • 不幸的是,这对我们来说只是一个肮脏的解决方法,因为文件上传组件集成在依赖于单个表单的 UI 中。
  • 有人找到解决方案了吗?

标签: jsf jsf-2 richfaces


【解决方案1】:

尝试a4j:ajaxexecute 属性。

来自文档:

执行:将参与请求处理生命周期的“执行”部分的组件的 ID。可以是单个 id、空格或逗号分隔的 Id 列表,或评估为数组或集合的 EL 表达式。可以在标识符列表中指定任何关键字“@this”、“@form”、“@all”、“@none”、“@region”。一些组件使用额外的关键字

我认为这正是你所需要的。

更多信息:Richfaces docs

【讨论】:

  • 我正在处理同一个项目并接管了这个问题。出于测试目的,我完全删除了 a4j:ajax 并将 execute="@this" 添加到 rich:fileUpload 本身,但仍然提交了整个表单。不过奇怪的是,作为请求 URL 的普通请求参数,而不是作为部分 ajax 请求的 POST 参数。
  • 您是否尝试在a4j:ajax 上添加execute="@this"?或者您是否尝试过f:ajax 而不是a4j:ajax
  • 我完全删除了a4j:ajaxrich:fileUpload 本身执行基于 ajax 的上传(如预期的那样),这已经导致完整的表单作为请求参数提交。事实上,在某些情况下,由于不正确的转义或请求参数过长,这会导致服务器错误。我使用 chrome 的网络监视器进行调试,它清楚地显示了上述行为。我现在切换到 PrimeFaces 的文件上传,效果很好。
  • 是的,我明白了,我在问你是否也尝试过其他选项。对不起我的英语不好:(。谢谢你的信息,如果我有时间我会做一些测试.
  • 是的,完全放弃 RF 上传并用 PrimeFaces 替换它。迁移相对容易,用于处理上传的机制几乎相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2020-04-13
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2013-10-13
相关资源
最近更新 更多