识别多文件上载中的每个字段

时间:2013-06-11 16:45:52

标签: java jsp file-upload struts2

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

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

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

2 个答案:

答案 0 :(得分: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>();

什么更适合您的需求

答案 1 :(得分:0)

使用自定义对象的列表(或Map),其中包含您的File,fileName和contentType(以及最终的其他字段)。一个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 */
}

in Action

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)。