1

当尝试使用 Struts 2 上传多个文件时ArrayList,如何识别每个字段?

例如,如果我有两个文件字段,File1并且File2在客户端,我选择仅上传File2,Struts 2 只会在列表中创建一个元素,我无法正确映射File1为空和File2上传的文件。

我可以在这里使用任何标识符吗?

4

2 回答 2

0

用不同的名称命名每个字段,并为操作属性创建相应的访问器。然后他们每个人都会通过OGNL处理名称并设置相应的属性。尝试使用不同的方法为迭代器标记索引的文件创建列表或映射。

<iterator begin="0" end="50" status="status"> 
  <s:file label="%{File + #status.index}" name="fileUpload[%{#status.index}]" size="40" />
</iterator>

<s:submit value="submit" name="submit" />

在行动

private List<File> fileUpload = new ArrayList<File>();

访问者也应该是每个属性

然后您将通过检查列表索引处的文件来知道其中哪些已上传。您也可以尝试使用Map.

<iterator begin="0" end="50" status="status"> 
  <s:file label="%{File + #status.index}" name="fileUpload['%{#status.index}']" size="40" />
</iterator>

<s:submit value="submit" name="submit" />

在行动

private Map<String, File> fileUpload = new HashMap<String, File>();

什么更适合您的需求

于 2013-06-11T17:31:08.543 回答
0

使用自定义对象的列表(或地图),其中包含您的文件、文件名和内容类型(最终还有其他字段)。一个JSP对应的元素,要明确。

我确实喜欢这样(因为我也有很多其他领域),它就像一个魅力。

(这不是唯一的方法,它只是当您还需要处理其他字段时会变得更加方便的一种工作方式)

POJO

public class MyCustomRow implements Serializable {

    private File   fileUpload;
    private String fileUploadFileName; 
    private String fileUploadContentType;

    private String otherField1;
    private String otherField2;

    /* All Getters and Setters here */
}

在行动

private List<MyCustomRow> rows;
/* Getter and Setter ... */

在 JSP 中

<s:iterator value="rows" status="row">

    <s:file      name="rows[%{#row.index}].fileUpload" />

    <s:textfield name="rows[%{#row.index}].otherField1"/>
    <s:textfield name="rows[%{#row.index}].otherField2"/>

</s:iterator>

文件名和内容类型将由 Struts2 自动检测和填充(确保您的堆栈中有 FileUploadInterceptor)。

于 2013-06-12T08:12:36.037 回答