Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java.util.Map从jsp传递到servlet_Java_Spring_Jsp_Servlets - Fatal编程技术网

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

将java.util.Map从jsp传递到servlet,java,spring,jsp,servlets,Java,Spring,Jsp,Servlets,我有一个名为Configuration的类,它有一些类型为java.util.List和java.util.Map的字段 public class Configuration { List<String> objects; Map<String, Integer> maps; // getters, setters... } 公共类配置{ 列出对象; 地图; //能手,二传手。。。 } 我有一些jsp页面,用户可以在其中编辑这些字段 对

我有一个名为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,我有一些问题-我不知道如何为key和value命名输入字段。当我将它们命名为key和value时,我在servlet中得到null

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

Wnen我将它们命名为maps.key和maps.value,我在servlet中得到空的map

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

当我把它们命名为“地图”时,我会发现spring转换错误

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


将映射从jsp传递到servlet的正确方法是什么?

我不会让Spring为您这样做。我不知道它是否能深入到那么深

在jsp中,可能有一个javascript按钮,每当您想要添加一个整数时,它都会为整数添加一个
字段(假设
映射
)。您应该能够设置此字段的name属性,并始终使用某些特定前缀。例如,使用前缀
NUMBER\u OF
。然后一个字段将变成,例如,
NUMBER\u OF_players
,其中
players
是您提供的值。因此,输入将如下所示:

<input type="text" name="NUMBER_OF_players" /> 
我没有添加所有的
null
检查和异常处理,我将这些留给您


您可以让Spring生成
配置
实例的一部分(已知的字段),然后自己使用上面的操作完成其余部分。

您可以使用Spring:bind标记来帮助您检查这个和这个您的意思是将映射从servlet传递到jsp吗?jsp在servlet之后得到处理。您通常会将映射设置为bean,然后使用标记库在jsp中呈现bean值(映射内容)。否,我的意思是使用form with post方法和controller with post methods将映射从jsp传递到servlet,并使用@ModelAttributeThx作为您的答案。我也考虑过这个决定,但仍然希望有一种简单的方法可以使用spring来解决这个问题。@Xenobyte spring使用您的bean字段名来映射请求参数。因为这是一个映射,所以无法告诉它要获取哪些参数(使用一个键)。Spring可能允许您注册一个自定义活页夹,但其中的逻辑与上面的类似。@Xenobyte或者您可以,看看下面的答案:
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);