SpringMVC(一):返回值及参数传递

一、返回值

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";
	}

前台输入:
在这里插入图片描述
控制台打出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43299617/article/details/82909979