当试图使用ArrayList
与Struts2上传多个文件时,如何识别每个字段?识别多个文件上传中的每个字段
举例来说,如果我有两个文件字段,File1
和File2
并在客户端,我选择只上传File2
,在Struts 2只在列表中创建一个元素,我不能够正确映射File1
为空和File2
与上传的文件。
有什么标识符我可以在这里使用?
当试图使用ArrayList
与Struts2上传多个文件时,如何识别每个字段?识别多个文件上传中的每个字段
举例来说,如果我有两个文件字段,File1
和File2
并在客户端,我选择只上传File2
,在Struts 2只在列表中创建一个元素,我不能够正确映射File1
为空和File2
与上传的文件。
有什么标识符我可以在这里使用?
使用列表(或地图),包含你的文件,文件名和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 */
}
在行动
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)。
为每个字段命名不同的名称,并为操作属性创建相应的访问器。然后,他们每个人都将通过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>();
什么是自定义对象的更适合您的需求
感谢您的罗马反应,但问题是我基于数据库的值动态创建表单。所以,我可能会生成一个带有2个文件字段或50个文件字段的表单,我无法为每个字段定义getter和setter。 – user2475448
“地图”选项有效,我可以根据地图的关键字进行识别。但是,我无法使用Map或使用List(使用键)获取fileName和contentType,因为它会发出如下警告。 “警告:参数[fileUpload [2] FileName]与acceptedPattern模式不匹配!“ – user2475448
我发现这个链接有相同的问题,但这个答案也没有工作。[链接] http://stackoverflow.com/questions/5477877/struts2-multiple-file-upload-with-map。我想知道为什么Struts 2文档不包含用于上传文件的Map选项 – user2475448