Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 如何使用SpringMVC将表单中的多个值传递给控制器?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 如何使用SpringMVC将表单中的多个值传递给控制器?

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> <

我正在使用Spring MVC模式,我正在尝试制作一个JSP文件,现在是这样的-

在表单中,我有四行,第一行仅用于标记,其他三行需要将数据放入文本框中。例如,对于DC1,我将在文本框中插入
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">&nbsp;</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
}