2013-06-11 24 views
0

当试图使用ArrayList与Struts2上传多个文件时,如何识别每个字段?识别多个文件上传中的每个字段

举例来说,如果我有两个文件字段,File1File2并在客户端,我选择只上传File2,在Struts 2只在列表中创建一个元素,我不能够正确映射File1为空和File2与上传的文件。

有什么标识符我可以在这里使用?

回答

0

使用列表(或地图),包含你的文件,文件名和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)。

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>(); 

什么是自定义对象的更适合您的需求

+0

感谢您的罗马反应,但问题是我基于数据库的值动态创建表单。所以,我可能会生成一个带有2个文件字段或50个文件字段的表单,我无法为每个字段定义getter和setter。 – user2475448

+1

“地图”选项有效,我可以根据地图的关键字进行识别。但是,我无法使用Map或使用List(使用键)获取fileName和contentType,因为它会发出如下警告。 “警告:参数[fileUpload [2] FileName]与acceptedPattern模式不匹配!“ – user2475448

+0

我发现这个链接有相同的问题,但这个答案也没有工作。[链接] http://stackoverflow.com/questions/5477877/struts2-multiple-file-upload-with-map。我想知道为什么Struts 2文档不包含用于上传文件的Map选项 – user2475448