【问题标题】:ajaxified file upload in jsfjsf中的ajaxified文件上传
【发布时间】:2012-01-26 09:00:24
【问题描述】:

我想上传文件而不发布整个表单。文件上传工作正常,但提交了整个表单。当验证正确时,这可以正常工作。但是当 p.e.必填字段为空,上传不起作用并返回错误消息(必填字段缺失) 所以我尝试 ajax 文件上传(ajax=true)。但随后上传什么也没做。

我尝试了一种解决方法,将文件上传和其他字段以不同的形式。这可行,但结果是您在其他字段中更改的数据在进行文件上传时会被忽略。

有什么建议吗?

这是我使用的代码:

<t:inputFileUpload id="fileupload" value="#{prospectDetail.upFile}" size="50" />
<h:outputLabel for="description" value="#{msg.prospectdetail_description}"/>
<mw:inputText id="description" size="40" value="#{prospectDetail.fileDescription}" />
<p:commandButton styleClass="button" value="#{msg.common_upload}" action="#{prospectDetail.upload}" ajax="false" process="@form" onbegin="busyPopup.show()" oncomplete="busyPopup.hide();"/>

【问题讨论】:

  • primefaces 上传有同样的问题,但是我将它设置为在文件选择时自动上传,效果很好,检查你使用的组件中是否有自动上传,这应该可以解决提交问题...

标签: ajax jsf file-upload


【解决方案1】:

不能通过XMLHttpRequest 的第一个版本(这是JavaScript 中的核心Ajax 请求控制器对象)上传文件。 XMLHttpRequest 的第二个版本支持它,但这不是 &lt;p:commandButton&gt; 实现的(目前浏览器支持较低)。

您似乎已经在使用 PrimeFaces,为什么不直接使用它自己的 &lt;p:fileUpload&gt; 组件呢? single upload 甚至 auto upload 示例应该为您完成(不要忘记在添加 PrimeFaces 的文件上传过滤器后从 web.xml 中删除 MyFaces 扩展过滤器!)。 PrimeFaces 的&lt;p:fileUpload&gt; 将在可用时自动使用 XHR2 文件上传。

我尝试了一种解决方法,即以不同的形式将文件上传和其他字段放在一起。这可行,但结果是您在其他字段中更改的数据在进行文件上传时会被忽略。

如果您将 bean 放入视图范围而不是请求范围并从操作方法返回 nullvoid,那么这应该可以工作。

【讨论】:

  • rulez :) 您现在是否可以在文件中添加额外的字段描述(字符串)并将其发送到文件上传事件的 bean?
猜你喜欢
  • 2011-12-16
  • 2012-09-23
  • 2011-07-22
  • 1970-01-01
  • 2013-09-12
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多