无疑的是在web中,有时候会进行参数的传递,常见的参数传递有在URL地址栏中进行,在Servlet中可以通过request.getParameter()这种方式来进行获取参数的值,其存在着一定的缺陷,如果需要传递的参数比较多,或者说传递的参数类型比较复杂(引用数据类型),在进行参数的传递就会比较的复杂。SpringMVC中的参数传递就比较的方便,接下来介绍几种常见的参数传递的方式
普通类型参数绑定
对于普通参数的传递存在两种情况
1)参数名称与Controller中的方法名称相同时
例如:页面中请求的参数名为name,在方法中的参数名也为name,则可以直接得到这个参数的值
2)参数名称与Controller中的方法名称相同时
例如:页面中请求的参数名为name,在方法中的参数名为userName,则通过在方法中加入注解则可以解决
注:在下面这个例子中就把name绑定为userName
@RequestMapping("/reg3.action")
public String reg3(@RequestParam(value="name")String userName,@RequestParam(value="password")String pwd) {
System.out.println(userName+","+pwd);
return "result";
}
对象类型绑定
普通对象类型
name的名称必须与bean中的属性名称相同,这样才会直接与对象进行绑定,在方法中就可以得到这个对象的值了
例如:
<form action="reg4.action" method="post">
姓名 :<input type="text" name="userName"/> <!--在User类中的属性名称为userName-->
密码:<input type="password" name="password">
<button type="submit">注册</button>
</form>
在方法中可以直接得到传递的这个对象
@RequestMapping("/reg4.action")
public String reg4(User user) {
System.out.println(user.getUserName()+","+user.getPassword());
return "result";
}
VO对象类型
VO对象就是指一个对象中包含另外一个或者多个对象,一个对象创建以后,就会存在其他的对象属性
例如:
public class UserVO {
private int id;
private User user;
在这个UserVO类中既有自己的属性id,也有属性User,User为另外一个类
进行参数的传递的时候,如果是简单数据类型则直接写名称,如果是引用数据类型的话就用 对象名.属性名 进行赋值
例如:
<form action="reg5.action" method="post">
id:<input type="text" name="id"/><br>
姓名:<input type="text" name="user.userName"><br>
密码:<input type="password" name="user.password"><br>
<button type="submit">注册</button>
</form>
在上面的表单中,明显id为UserVO中的简单数据类型,因此在就直接写属性名称,而userName为Use中的属性,而User又在UserVO中是它的一个属性,因此为userName赋值则为 user.userName.
List集合参数绑定
List集合如果不做类型限制的话,可以装多种数据类型,但大多数情况下List用来装多个对象,
在UserVO类中加入属性List
public class UserVO {
private int id;
private User user;
private List<User> list;
在表单中进行参数的赋值
<form action="reg8.action" method="post">
id:<input type="text" name="id"/><br>
姓名:<input type="text" name="list[0].userName"><br>
密码:<input type="password" name="list[1].password"><br>
<button type="submit">注册</button>
</form>
list[0]装的就是第一个User对象list[1]装的就是第二个User对象,在上面中就为第一个对象的userName赋值,第二个对象的password赋值