Java 如何使用SpringMVC将表单中的多个值传递给控制器?
我正在使用Spring MVC模式,我正在尝试制作一个JSP文件,现在是这样的- 在表单中,我有四行,第一行仅用于标记,其他三行需要将数据放入文本框中。例如,对于DC1,我将在文本框中插入Java 如何使用SpringMVC将表单中的多个值传递给控制器?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用Spring MVC模式,我正在尝试制作一个JSP文件,现在是这样的- 在表单中,我有四行,第一行仅用于标记,其他三行需要将数据放入文本框中。例如,对于DC1,我将在文本框中插入numserver值,在文本框中插入ipaddress值,在文本框中插入hostname值 <form method="post" enctype="multipart/form-data"> <table> <tr> <
numserver
值,在文本框中插入ipaddress
值,在文本框中插入hostname
值
<form method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Datacenter Name</td>
<td>Number of Servers</td>
<td>IP Address(comma separated)</td>
<td>Host Name(comma separated)</td>
</tr>
<tr>
<td><label for="dc1">DC1</label></td>
<td><input type="text" name="numservers" size="20"></td>
<td><input type="text" name="ipaddress" size="60"></td>
<td><input type="text" name="hostname" size="60"></td>
</tr>
<tr>
<td><label for="dc1">DC2</label></td>
<td><input type="text" name="numservers" size="20"></td>
<td><input type="text" name="ipaddress" size="60"></td>
<td><input type="text" name="hostname" size="60"></td>
</tr>
<tr>
<td><label for="dc1">DC3</label></td>
<td><input type="text" name="numservers" size="20"></td>
<td><input type="text" name="ipaddress" size="60"></td>
<td><input type="text" name="hostname" size="60"></td>
</tr>
<tr><td colspan="2"> </td></tr>
</table>
<input type="submit">
</form>
最初,我使用的是多值映射
,但我不确定我的上述输入标准将如何适用于此?一般来说,我不确定如何在上述用例中构建上述方法中的输入,以便能够轻松提取方法中的所有值
这是我第一次开始使用Spring MVC,因此遇到了一些困难。您可以向Spring控制器传递一个数组,如下所示:
@RequestMapping(value = "test", method = RequestMethod.GET)
public HashMap<String, String> testRequest(@RequestParam String[] numservers, @RequestParam String[] ipaddress, @RequestParam String[] hostname) {
//By using array position you can determine each row
//DC1 values
String dc1_numServer = numservers[0];
String dc1_ipaddres= ipaddress[0];
String dc1_hostname= hostname[0];
//DC2 values
String dc2_numServer = numservers[1];
String dc2_ipaddres= ipaddress[1];
String dc2_hostname= hostname[1];
//DC3 values
String dc3_numServer = numservers[2];
String dc3_ipaddres= ipaddress[2];
String dc3_hostname= hostname[2];
}
@RequestMapping(value=“test”,method=RequestMethod.GET)
公共HashMap testRequest(@RequestParam String[]numserver、@RequestParam String[]ipaddress、@RequestParam String[]hostname){
//通过使用数组位置,可以确定每一行
//DC1值
字符串dc1_numServer=numServer[0];
字符串dc1_ipaddress=ipaddress[0];
字符串dc1_hostname=hostname[0];
//DC2值
字符串dc2_numServer=numServer[1];
字符串dc2_ipaddress=ipaddress[1];
字符串dc2_hostname=hostname[1];
//DC3值
字符串dc3_numServer=numServer[2];
字符串dc3_ipaddress=ipaddress[2];
字符串dc3_hostname=hostname[2];
}
一种简单的方法是定义一个模型来保存整个信息:
public class Datacenter {
private String name;
private String ipAddress;
private String hostName;
private String numServers;
// Add getters and setters..
}
public class Datacenters {
private List<Datacenter> datacenters;
//Getters and setters..
}
就是这样,Spring应该为您绑定所有内容。出现405状态是因为您的方法侦听器是GET。
您需要将其更改为POST,这样它才能接受邮件。谢谢。。但我如何识别,这是针对
DC1
的,这是针对DC2
的,如果是针对DC3
。。?我只需要确认这些是DC1的,这些是DC2的,这些是DC3的。。这样我就可以适当地解析它们了?我的JSP是否也会因此而改变,因为我没有任何对象值持有者?更新的答案请检查,您不需要在jspSomehow中更改任何内容,使用当前JSP,如果我点击我的URL,它不会在浏览器上显示任何文本框,并且我在我的eclipse concolse上看到异常作为servlet异常。。。你觉得我的JSP有什么问题吗?我认为JSP必须进行更改,可能我们需要使用$numserver之类的东西来标记值?您会遇到什么异常?请检查一下,谢谢Biju。。在data holder类中,应该只有一个公共类,对吗?目前,如果我按原样使用,它会给我编译例外,这只是一个快速而肮脏的示例代码@SSH,它需要清理-您必须添加getter和setter,将类移动到单个文件中等等。。在JSP文件中做了更改之后,正如您在建议中提到的,当我像这样点击我的url时http://127.0.0.1:8080/dataweb/test
,它总是转到我的testRequest
方法,而不首先为我加载JSP页面,因此dataCenters
第一次总是空的,然后,我可以在浏览器上看到我的JSP页面,然后如果我点击submit,我会看到这个错误-错误消息:请求方法“POST”不受支持。405方法不允许使用http方法:POST。不支持请求方法“POST”
。你知道如何解决这个问题吗?如果你能把你的代码放在github中,我可以尝试修复代码并向你发送请求,让我知道,很难从评论中找出哪里出了问题。
public class Datacenter {
private String name;
private String ipAddress;
private String hostName;
private String numServers;
// Add getters and setters..
}
public class Datacenters {
private List<Datacenter> datacenters;
//Getters and setters..
}
<tr>
<td><label for="dc1">DC1</label></td>
<input type="hidden" name="datacenters[0].name" value="DC1"/>
<td><input type="text" name="datacenter[0].numServers" size="20"></td>
<td><input type="text" name="datacenter[0].ipAddress" size="60"></td>
<td><input type="text" name="datacenter[0].hostName" size="60"></td>
</tr>
<tr>
<td><label for="dc1">DC2</label></td>
<input type="hidden" name="datacenters[1].name" value="DC2"/>
<td><input type="text" name="datacenter[1].numServers" size="20"></td>
<td><input type="text" name="datacenter[1].ipAddress" size="60"></td>
<td><input type="text" name="datacenter[1].hostName" size="60"></td>
</tr>
@RequestMapping(value = "test", method = RequestMethod.GET)
public String testRequest(DataCenters dataCenters) {
//.. process request
}