我正在尝试使用Spring MVC带注释的控制器的示例项目。到目前为止,我在网上找到的所有示例都将JSP绑定到特定模型,控制器使用@ModelAttribute
来检索处理程序方法中的模型对象。
如何将其他参数(不存在于Model对象中)从JSP传递给Controller?我是否使用JavaScript来执行此操作?也有人可以澄清HttpServletRequest
对象应该用于什么。
感谢。
答案 0 :(得分:31)
只需从jsp输入标记中删除“path”,然后使用HttpServletRequest检索剩余数据。
例如我有一个类似
的beanpublic 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)
{
------
}