1

我有一些名为 Configuration 的类,其中包含一些 java.util.List 和 java.util.Map 类型的字段。

public class Configuration {
    List<String> objects;
    Map<String, Integer> maps;
        // getters, setters...
}

我有一些 jsp 页面,用户可以在其中编辑此字段。

使用 List 我没有问题,我只需将我的输入字段命名为与类中命名的字段相同,然后 spring 将其转换为 @ModelAttribute。

<input type="text" name="objects"/>
<input type="text" name="objects"/>
<input type="text" name="objects"/>

使用 Map 我有一些问题 - 我不知道如何为我的输入字段命名键和值。当我将它们命名为键和值时,我在 servlet 中得到空值。

<input type="text" name="key"/><input type="text" name="value"/>

Wnen 我将它们命名为 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的正确方法是什么?

4

2 回答 2

3

我不会让 Spring 为你做这件事。不知道能不能走这么深。

在你的jsp中,也许你有一个javascript按钮,每次你想添加一个<input>整数时都会添加一个字段(假设)。Map<String, Integer>您应该能够设置此字段的名称属性并始终使用一些特定的前缀。例如,使用前缀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实例的一部分(已知的字段),然后用上面的方法自己完成其余部分。

于 2013-05-01T20:00:42.573 回答
0

您可以使用 spring:bind 标签来帮助您检查此链接和此链接

于 2013-05-02T08:54:23.330 回答