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

时间:2011-04-08 03:17:33

标签: java spring-mvc

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

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

感谢。

2 个答案:

答案 0 :(得分:31)

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

例如我有一个类似

的bean
public class SomeData {
    private String name;

    public String getName() {
        return name;
    }

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

}

然后在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>

注意,somedata bean的名称字段不是age。因此,添加年龄字段时没有“路径”。如果没有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";
   }

访问视图上的数据时,

<table>
    <tr>
        <td>name</td>
        <td>${somedata.name}</td>
    </tr>
    <tr>
        <td>age</td>
        <td>${age}</td>
    </tr>
 </table>

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

答案 1 :(得分:1)

如果一个人不想创建另一个类(bean),尽管它应该在那里,那么除了@ModelAttrbute之外,还可以使用@RequestParam

public String someAction(@RequestParam("somedata") String data)
{
------
}