Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 识别多个文件上载中的每个字段_Java_Jsp_File Upload_Struts2 - Fatal编程技术网

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

Java 识别多个文件上载中的每个字段,java,jsp,file-upload,struts2,Java,Jsp,File Upload,Struts2,当尝试使用Struts2使用ArrayList上载多个文件时,如何识别每个字段 例如,如果我有两个文件字段,File1和File2,在客户端,我选择只上传File2,Struts 2只在列表中创建一个元素,我无法正确地将File1映射为空,并将上传的文件映射为File2 这里有什么标识符可以使用吗?用不同的名称命名每个字段,并创建相应的操作属性访问器。然后,它们中的每一个都将通过OGNL处理名称并设置相应的属性。尝试使用不同的方法为迭代器标记索引的文件创建列表或映射 <iterator b

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

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


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

用不同的名称命名每个字段,并创建相应的操作属性访问器。然后,它们中的每一个都将通过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>();
private Map<String, File> fileUpload = new HashMap<String, File>();
private Map fileUpload=new HashMap();
什么更适合您的需要

使用自定义对象的列表(或映射),其中包含您的文件、文件名和内容类型(以及最终的其他字段)。一个JSP行对应的元素,要清楚

我确实喜欢它(因为我还有很多其他领域),而且它很有魅力

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

波乔

行动中

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

感谢您的响应,但问题是我正在根据数据库中的值动态创建表单。因此,我可能会生成一个包含2个文件字段或50个文件字段的表单,但我无法为每个字段定义getter和setter。但是,我无法使用Map或List(带key)获取文件名和contentType,因为它会发出如下警告。“警告:参数[fileUpload[2]FileName]与acceptedPattern模式不匹配!”我发现此链接存在相同问题。但这个答案也不起作用。[链接]。我想知道为什么Struts 2文档没有包含用于上载文件的映射选项。@user2475448您可以尝试将自定义类中的所有三个字段合并,并将其用作集合的元素。然后需要在名称中进行一些更改以填充索引属性。@RomanC,我也想实现相同的功能,但无法在我的操作中映射相同的功能。我有
文件[]
而不是
列表
,我不想错过上传文件的索引
private List<MyCustomRow> rows;
/* Getter and Setter ... */
<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>