我有一些名为Configuration的类,它有一些类型为java.util.List和java.util.Map的字段。
public class Configuration {
List<String> objects;
Map<String, Integer> maps;
// getters, setters...
}
我有一些jsp页面,用户可以在其中编辑这些字段。
使用List我没有问题,我只是将输入字段命名为与class中命名的字段相同,spring将其转换为@ModelAttribute。
<input type="text" name="objects"/>
<input type="text" name="objects"/>
<input type="text" name="objects"/>
使用Map我有一些问题 - 我不知道如何为键和值命名我的输入字段。当我将它们命名为key和value时,我在servlet中得到null。
<input type="text" name="key"/><input type="text" name="value"/>
我正在将它们命名为maps.key和maps.value我在servlet中获取空映射
<input type="text" name="maps.key"/><input type="text" name="maps.value"/>
当我像地图一样命名时,我会得到弹簧转换错误
<input type="text" name="maps"/><input type="text" name="maps"/>
将映射从jsp传递给servlet的正确方法是什么?
答案 0 :(得分:2)
我不会让Spring为你做这件事。我不知道它是否可以那么深。
在你的jsp中,也许你有一个javascript按钮,每次你想要添加一个<input>
字段为整数(假设Map<String, Integer>
)。您应该能够设置此字段的name属性,并始终使用某些特定前缀。例如,使用前缀NUMBER_OF_
。然后一个字段将成为例如NUMBER_OF_players
,其中players
是您提供的值。所以输入看起来像:
<input type="text" name="NUMBER_OF_players" />
在您的控制器中,将HttpServletRequest
传递给您的处理程序方法并调用getParameterMap()
Map<String, String[]> parameterMap = request.getParameterMap();
for (String key: parameterMap.keySet()) {
if (key.startsWith("NUMBER_OF_")) {
parameterKeyList.add(key); // add it to a list of parameters that are going to be
// used for your Configuration instance
// you know this is a good one because it has the prefix
}
}
Map<String, Integer> maps = ...;
for (String parameter : parameterKeyList) {
String value = request.getParameter(parameter);
Integer integer = Integer.parseInt(value);
maps.put(parameter, integer);
}
Configuration config = new Configuration();
config.setMaps(maps);
我没有添加所有null
检查和异常处理,我把它留给你。
你可以让Spring生成Configuration
实例的一部分(已知的字段),然后自己完成以上操作。
答案 1 :(得分:0)