Java 如何使用Commons文件上载从选择字段检索多个值?
更新:问题最终是闪存组件本身。它没有正确编译元素中的多个值。我通知了开发人员,他们实施了一个变通方法。Commons FileUpload确实支持每个接受答案的多个值 我有一个表单enctype=“multipart/form data”,其中有一个Java 如何使用Commons文件上载从选择字段检索多个值?,java,servlets,file-upload,apache-commons-fileupload,Java,Servlets,File Upload,Apache Commons Fileupload,更新:问题最终是闪存组件本身。它没有正确编译元素中的多个值。我通知了开发人员,他们实施了一个变通方法。Commons FileUpload确实支持每个接受答案的多个值 我有一个表单enctype=“multipart/form data”,其中有一个 <select name="XX" multiple="multiple"> 并继续通过 // Process a regular form field if (item.isFormField()) { String nam
<select name="XX" multiple="multiple">
并继续通过
// Process a regular form field
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
}
我遇到的问题是item.getString()仅返回选择字段中的第一个选定值;无论我选了多少项,我只得到第一项
同样,当我使用标准servlet方法提取参数时,即
final String[] values = request.getParameterValues("XX");
值为空,我假设这是因为表单是多部分编码的
如何从多重选择字段中检索这些多重选择值
这个(未回答的)问题也是由另一位作者提出的。事实上,几个项可以具有相同的字段名,您只需将相同字段名的所有项字符串值添加到字符串集合中,然后将该集合转换为数组 在那里找到一些信息:
以上链接不起作用,如果其他人面临同样的问题,下面介绍如何获取所有值- 使用Commons File Upload从选择字段检索多个值-
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
if (name.equals("multi-select"))
completeSet = value;
}
那么completeSet将只有第一个值。multi-select的所有其他值也位于同名项中(此处multi-select)。
因此,您所要做的就是逐个获取所有值,然后将其转换为所需的数据类型(即-收集列表中的所有内容并将其转换为字符串[]:))例如-
List completeSet=new ArrayList();
if(name.equals(“多选”))
完成设置。添加(值);
这样,在completeSet结束时将拥有所有的值集。您使用的是哪个flash upload组件。。?基本上我有相同的要求,但不能得到正确的闪存上传组件。我对它非常满意,从我第一次报告这个bug到为我发布一个固定版本,开发者很快就实现了转变。HTTP错误:404
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
if (name.equals("multi-select"))
completeSet = value;
}
List<String> completeSet=new ArrayList<String>();
if(name.equals("multi-select"))
completeSet.add(value);