0

我正在为基于 struts 1.1 构建的应用程序进行增强我需要有一个我使用的文件上传字段,

<html:file  size="40" property="strUploadNoFile" />

然后我将属性添加到使用 DynaValidatorForm 的 struts 配置文件表单 bean,如下所示,

<form-property name="strUploadNoFile" type="org.apache.struts.upload.FormFile"/>

此外,我也在 jsp 中将表单加密类型添加为 multipart/form-data。

该代码工作正常,我可以成功读取上传文件的内容。

但是这里的应用程序设计是一对动作映射到同一个表单bean。因此,当我来自不存在文件上传字段的请求路径时,我得到了异常,

无法将“java.lang.String”类型的值分配给“org.apache.struts.upload.FormFile”类型的属性“strUploadNoFile”

原因是因为我有条件地将密码切换为默认应用程序/x-www-form-urlencoded 或 multipart/form-data。因此,当我来自不存在文件上传的路径时,我的加密类型将是 application/x-www-form-urlencoded。但是正如我上面提到的,应用程序结构使用通用表单 bean 来执行不同的操作,但作为 FormFile 的 bean 属性 strUploadNoFile 仍保留在表单属性中,但 jsp 中的加密类型是 multipart/form-data。我认为这是异常的原因。

我只需要知道我是否可以从该 xml 文件中硬编码的属性中动态添加?所以我只能从具有文件上传字段的请求路径中添加 FileForm 属性。在这种情况下,为每个请求重新设计具有单独表单 bean 的应用程序架构是一项艰巨的工作。

4

1 回答 1

0

如果您的操作使用相同的表单 bean,那么他们将期望相同的表单元素。

您收到错误的原因是,正如您所指出的,您混合了表单编码。

IMO 有一种形式来满足所有需求完全违背了目的,并且正在使用与设计使用方式相反的框架 - 因此存在问题。

最简单的解决方案可能是创建一个自定义请求处理器,当它遇到非多部分表单时它会做一些“有用的”,但我不确定该怎么做。

综上所述,您不需要为每个请求构建一个新表单,您只需要创建一个带有文件的表单 bean,以及一个没有. IMO 这样做是错误的,但只是从“让我们不要误导每个人,让人们难以思考应用程序”这一方面,而不是在技术方面。

于 2013-02-19T12:52:12.420 回答