【问题标题】:Struts with FormFile filed带有 FormFile 的 Struts
【发布时间】:2013-02-19 09:49:18
【问题描述】:

我正在对基于 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 的应用程序架构是一项艰巨的工作。

【问题讨论】:

    标签: java struts


    【解决方案1】:

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

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

    IMO 使用一种形式来满足所有需求完全违背了目的,并且使用的框架与它的设计使用方式背道而驰——因此出现了问题。

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

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

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多