一、返回值
1、返回一个jsp页面
/**
* 返回一个jsp页面
* @return
*/
@RequestMapping(value="/returnJsp",method=RequestMethod.GET)
public String returnJsp() {
return "/testController/returnJsp";
}
访问:http://localhost:8080/play/testController/returnJsp.action
2、往页面传数据方式一:Model
/**
* 往页面传数据方式一:model
* @param model
* @return
*/
@RequestMapping(value="/testModel",method=RequestMethod.GET)
public String testModel(Model model) {
User user1 = new User();
user1.setUserName("张三");
User user2 = new User();
user2.setUserName("李四");
List<User> list = new ArrayList();
list.add(user1);
list.add(user2);
model.addAttribute("hello", "world1");
model.addAttribute("world2");
model.addAttribute(user1);
model.addAttribute("user2", user2);
model.addAttribute("list", list);
return "/testController/testModel";
}
页面取值方式为:
<h3>方式一:${hello}</h3>
<h3>方式二:${string}</h3> <!-- 注意此处string小写 -->
<h3>方式三:${user.userName}</h3> <!-- 这样方参数的话,默认的key是参数类型 -->
<h3>方式四:${user2.userName}</h3>
<c:forEach items="${list}" var="user">
<h3>方式五:${user.userName}</h3>
</c:forEach>
访问 http://localhost:8080/play/testController/testModel.action
3、往页面传数据方式二:ModelAndView
/**
* 往页面传数据方式二:ModelAndView
* @return
*/
@RequestMapping(value="/testModelAndView",method=RequestMethod.GET)
public ModelAndView testModelAndView() {
User user1 = new User();
user1.setUserName("张三");
User user2 = new User();
user2.setUserName("李四");
List<User> list = new ArrayList();
list.add(user1);
list.add(user2);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("hello", "world1");
modelAndView.addObject("world2");
modelAndView.addObject(user1);
modelAndView.addObject("user2", user2);
modelAndView.addObject("list", list);
modelAndView.setViewName("/testController/testModelAndView");
return modelAndView;
}
model需要写在方法的参数中,ModelAndView则不需要。
Model方式与ModelAndView方式基本相同,页面取值方式为
<h3>方式一:${hello}</h3>
<h3>方式二:${string}</h3> <!-- 注意此处string小写 -->
<h3>方式三:${user.userName}</h3> <!-- 这样方参数的话,默认的key是参数类型 -->
<h3>方式四:${user2.userName}</h3>
<c:forEach items="${list}" var="user">
<h3>方式五:${user.userName}</h3>
</c:forEach>
访问:http://localhost:8080/play/testController/testModelAndView.action
二、参数传递
1、使用RequestParam进行简单参数绑定
/**
* 参数绑定:RequestParam
* @return
*/
@RequestMapping(value="/testRequestParam")
public String testRequestParam(
@RequestParam String name,
@RequestParam("num") int age, //当绑定的参数名不一致时,需要指定
@RequestParam(required=false) String address //false 表示非必须,默认为true,为true时没有此参数报404
){
System.out.println("name : " + name );
System.out.println("age : " + age );
System.out.println("address : " + address );
return "/testController/returnJsp";
}
访问:http://localhost:8080/play/testController/testRequestParam.action?name=张三&num=11&address=北京
控制台打出:
2、使用RequestParam绑定自定义对象
使用form表单提交,需要将格式转化为json,后台才能封装为自定义对象。
<form>
<input id="userName" name="userName" ></input>
<input id="age" name="age" ></input>
<button id="btn" >提交</button>
</form>
<script type="application/javascript">
//发送表单ajax请求
$('#btn').on('click',function(){
$.ajax({
url:"testRequestBody.action",
type:"POST",
data:JSON.stringify($('form').serializeObject()),
contentType:"application/json", //缺失会出现URL编码,无法转成json对象
success:function(){
alert("成功");
}
});
});
/**
* jquery方式自动将form表单封装成json对象
*/
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [ o[this.name] ];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
</script>
此方式为使用jquery将参数转化为json格式,页面需要引入jquery。
普通form提交方式需要逐一接收。
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
后台接收对象代码
/**
* 绑定自定义对象
* @param user
* @return
*/
@RequestMapping(value="/testRequestBody")
public String testRequestBody(
@RequestBody User user
){
System.out.println("userName : " + user.getUserName() );
return "/testController/returnJsp";
}
前台输入:
控制台打出: