从Spring MVC中的自定义表单标记中上载文件

时间:2011-08-19 13:00:32

标签: file-upload spring-mvc taglib

上下文

我们应用程序的管理员端部分要求用户编辑各种类型的内容,这涉及使用富文本编辑器或使用文件生成可由“客户端”看到的内容'应用程序的用户。它是一种特定于域的CMS lite。

因为这个“内容”可以在应用程序的各个部分中使用,所以它在我们的一些域实体中作为单独的关系包含在内。我们决定创建自己的标记库,用于定义一些表单字段,当管理员编辑包含一段内容的实体时,可以使用这些字段来编辑此内容。

问题

我们希望能够做到以下几点。

<form:form modelAttribute=...>
    <olo:content-editor path="content"/>
    <!-- Other form fields for this entity -->
    <form:.../>
    <form:.../>
</form:form>
然后,olo:content-editor标记会根据所需的内容类型生成许多表单字段。这意味着它可能(或者,根据内容的类型,可能不会!)生成包含以下内容的filebased-content标记:

<input type="file" name="file/>

可用于替换与基于文件的内容关联的文件。

问题是Spring文档表明文件上传要求表单让enctype定义它发送多部分表单数据。由于文件上传是标记的一部分,而不是表单本身,我们发现这是不可取的。我们希望能够在表单中使用我们的olo:content-editor标记,而无需更改表单enctype属性。这可能吗?

可能的解决方案

我们可以想到两个客户端黑客可以解决我们的问题,但两者似乎都是相当难看的解决方案:

  • 在基于文件的内容标记中包含一个脚本,该标记在加载时更改格式enctype,以便始终将其设置为适当的类型。 (非常难看。)
  • 将文件数据提交为常规隐藏表单字段,其中的数据是使用HTML5文件API设置的(管理员使用兼容的浏览器。这看起来不那么难看,但仍然不是最佳解决方案。)

0 个答案:

没有答案