我正在为基于struts 1.1构建的应用程序进行增强 我需要有一个文件上传字段,我使用
<html:file size="40" property="strUploadNoFile" />
然后我将属性添加到使用DynaValidatorForm的struts configaration文件表单bean,
<form-property name="strUploadNoFile" type="org.apache.struts.upload.FormFile"/>
我也在jsp中将表单encript类型添加为multipart / form-data。
代码工作正常,我可以成功读取上传文件的内容。
但是这里设计的应用程序是一对动作映射到同一个表单bean。因此,当我来自不存在文件上载字段的请求路径时,我得到例外,
无法将“java.lang.String”类型的值赋给属性 类型为'org.apache.struts.upload.FormFile'的'strUploadNoFile'
原因是因为我有条件地将encript切换为默认的application / x-www-form-urlencoded或multipart / form-data。 所以,当我来自不存在文件上传的路径时,我的encript类型将是application / x-www-form-urlencoded。 但正如我上面提到的,应用程序结构使用常见的表单bean进行不同的操作仍然是作为FormFile的bean属性strUploadNoFile保留在表单属性中,但是jsp中的encript类型是multipart / form-data。 我认为这是异常的原因。
我只需要知道我是否可以从该xml文件中硬编码的属性中动态添加?所以我只能从具有文件上载字段的请求路径添加FileForm属性。 在这种情况下,为每个请求重新设计应用程序体系结构具有单独的表单bean。
答案 0 :(得分:0)
如果您的操作使用相同的表单bean,那么他们将期望相同的表单元素。
您收到错误的原因是,正如您所指出的,您还混合表单编码。
IMO有一种形式满足所有需求完全违背了目的,并使用框架计数器来设计如何使用 - 因此存在问题。
最简单的解决方案可能是创建一个自定义请求处理器,在遇到非多部分表单时执行“有用”的操作,但我不确定要做什么。
所有这些说明,您不需要为每个请求构建一个新表单,您只需要创建一个表单bean with 一个文件,并且一个< EM>没有。国际海事组织这样做错误,但仅限于“让我们不要误导所有人并使其难以考虑应用程序”,而不是技术方面。