Fix RequestTrans.set() for multiple file upload items with the same name.

This commit is contained in:
hns 2007-06-04 08:03:36 +00:00
parent 22ec17d968
commit 19c2858b32

View file

@ -128,12 +128,13 @@ public class RequestTrans implements Serializable {
*/ */
public void set(String name, Object value) { public void set(String name, Object value) {
int bracket = name.indexOf('['); int bracket = name.indexOf('[');
Object previousValue;
if (bracket > -1 && name.endsWith("]")) { if (bracket > -1 && name.endsWith("]")) {
Matcher m = paramPattern.matcher(name); Matcher m = paramPattern.matcher(name);
String partName = name.substring(0, bracket); String partName = name.substring(0, bracket);
Map map = values; Map map = values;
while (m.find()) { while (m.find()) {
Object previousValue = map.get(partName); previousValue = map.get(partName);
Map partMap; Map partMap;
if (previousValue == null) { if (previousValue == null) {
partMap = new SystemMap(); partMap = new SystemMap();
@ -146,11 +147,15 @@ public class RequestTrans implements Serializable {
partName = m.group(1); partName = m.group(1);
map = partMap; map = partMap;
} }
if (map.put(partName, value) != null) previousValue = map.put(partName, value);
throw new RuntimeException("Conflicting HTTP Parameters for '" + name + "'");; if (previousValue != null &&
(!(previousValue instanceof Object[]) || ! partName.endsWith("_array")))
throw new RuntimeException("Conflicting HTTP Parameters for '" + name + "'");
} else { } else {
if (values.put(name, value) != null) previousValue = values.put(name, value);
throw new RuntimeException("Conflicting HTTP Parameters for '" + name + "'");; if (previousValue != null &&
(!(previousValue instanceof Object[]) || !name.endsWith("_array")))
throw new RuntimeException("Conflicting HTTP Parameters for '" + name + "'");
} }
} }