如何从标有enctype:partipart/form-data(JSF 2.0)的表单中提取文本



我有一个JSF页面,它有一个h:form,它有一些文本字段,还有一个来自primefaces 的图像上传小工具

我的问题是:如何从字段中获取文本并将其分配给某个变量。(目的是将上传的图像与文本分离(

-我该怎么办?

-我需要过滤器吗?

-有没有什么简单的方法可以用primefaces文件上传工具实现它?

这对于PrimeFaces 2.2.1来说并非微不足道。PF2文件上传处理有点像史诗般的失败。在幕后,使用Ajax上传文件已经不是一件小事了。XMLHttpRequest对象根本不支持multipart/form-data请求。许多"Ajaxified"(有一种异步进度的感觉(文件上传解决方案都是基于隐藏的iframe,或者像PF一样,使用Flash。PF 2是基于Flash的,不能与常规文本输入相结合,以便一次性提交所有数据。

在PF3中,文件上传组件进行了大幅修改。使用"简单"的文件上传模式,您的问题应该得到解决。然而,PF3目前仍处于β/α阶段。你需要在你的网络应用程序上做很多单元测试,看看它是否在PF3上不坏。

如果PF3不是一个选项,那么你最好使用战斧2.0或自制JSF组件。

  • JSF 2.0文件上传-Tomahawk 2.0文件上传教程
  • 使用JSF 2.0和Servlet 3.0上传文件-自定义文件上传组件教程

至于过滤器,FacesServlet使用HttpServletRequest#getParameter()来检索提交的值。当您熟悉基本的JSP/Servlet时,您应该知道它通常是如何工作的。默认的HTML表单编码是application/x-www-form-urlencodedgetParameter()方法依赖于此。然而,为了能够同时发送二进制数据,例如文件上传,这种默认的表单编码是不合适的。为此,应使用multipart/form-data

然而,使用这种表单编码,getParameter()调用将不再工作。他们都将返回null。最简单的形式是,您需要根据每个请求手动解析请求体。另请参阅如何使用JSP/Servlet将文件上载到服务器?然而,这与JSF结合使用是不可行的,因为它依赖于getParameter()调用来使用提交的值设置bean属性(模型值(并调用命令按钮/链接操作。

因此,您希望以这种方式更改HttpServletRequest,以便getParameter()调用返回正确的值。因此,Filter是正确的选择,因为它在任何servlet(如FacesServlet(之前运行。然后,过滤器应该解析multipart/form-data请求体,创建一个参数映射和包装,并用一个自定义实现替换原始的HttpServletRequest,该实现返回正确的参数,并通过链传递该请求对象,以便JSF可以"以通常的方式"完全透明地使用它。

相关内容

  • 没有找到相关文章

最新更新