在Spring MVC中将参数从JSP传递到Controller

use*_*946 13 java spring-mvc

我正在尝试使用Spring MVC带注释的控制器的示例项目.到目前为止,我在网上找到的所有示例都将JSP绑定到特定模型,控制器用于@ModelAttribute在处理程序方法中检索模型对象.

如何将其他参数(不存在于Model对象中)从JSP传递给Controller?我是否使用JavaScript来执行此操作?也有人可以澄清该HttpServletRequest对象应该用于什么.

谢谢.

kal*_*yan 31

只需从jsp输入标记中删除"path",然后使用HttpServletRequest检索剩余数据.

例如,我有一个像豆子一样的

public class SomeData {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在jsp中我将在普通的html标签中发送附加数据字段

<form:form method="post" action="somepage" commandName="somedata">
    <table>
    <tr>
        <td>name</td>
        <td><form:input path="name" /></td>
    </tr>
    <tr>
        <td>age</td>
        <!--Notice, this is normal html tag, will not be bound to an object -->
        <td><input name="age" type="text"/></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="send"/>
        </td>
    </tr>
</table>
</form:form>
Run Code Online (Sandbox Code Playgroud)

请注意,somedata bean具有年龄不是的名称字段.因此,添加年龄字段时没有"路径".如果没有path属性,则对象属性不会绑定到此字段.

在Controller上我将不得不使用HttpServletRequest,如,

@RequestMapping("/somepage")
public String someAction(@ModelAttribute("somedata") SomeData data, Map<String, Object> map,
                                HttpServletRequest request) {

       System.out.println("Name=" + data.getName() + " age=" + request.getParameter("age"));

       /* do some process and send back the data */
        map.put("somedata", data);
        map.put("age", request.getParameter("age"));

        return "somepage";
   }
Run Code Online (Sandbox Code Playgroud)

在访问视图上的数据时,

<table>
    <tr>
        <td>name</td>
        <td>${somedata.name}</td>
    </tr>
    <tr>
        <td>age</td>
        <td>${age}</td>
    </tr>
 </table>
Run Code Online (Sandbox Code Playgroud)

somedata是提供name属性的bean,age是控制器显式设置的属性.