将java.util.Map从jsp传递给servlet

时间:2013-05-01 19:20:06

标签: java spring jsp servlets

我有一些名为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的正确方法是什么?

2 个答案:

答案 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)

你可以使用spring:bind标签来帮助你检查这个linklink