2011-04-08 132 views
13

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

我该如何着手将JSP中的其他参数(不存在于Model对象中)传递给Controller?我是否使用JavaScript来做到这一点?也有人可以澄清什么HttpServletRequest对象应该用于。

谢谢。

回答

30

只需从jsp输入标记中删除“路径”并使用HttpServletRequest来检索剩余的数据即可。

比如我有一个像

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豆有名字字段的年龄不是。所以年龄字段没有“路径”添加。没有path属性,对象属性不会被绑定到这个字段。

上控制器I将不得不使用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是其提供的名称属性和年龄是bean由控制器明确设置属性。

+0

感谢名单在这个例子中它解决了我的问题 – Azuu 2013-02-02 09:27:42

1

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

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

你也可以离开了@RequestParam注解如果请求参数的名称对应方法参数名 – 2013-05-14 05:25:12

相关问题