这篇文章的讲解都是基于注解的方式,关于spring mvc注解的介绍可以看我的上一篇文章:Spring mvc系列四之 注解介绍以及spring mvc的其它运用可以看我spring mvc系列的文章.
在讲spring mvc的时候讲解@RequestParam和@PathVariable用过spring mvc的数据填充.当我们从表单中传来数据时,可在相应的控制器的处理方法参数上写上相同名字参数以及相应的类型即可,当表单中的参数名称和方法参数名称不一样时可用@RequestParam或@PathVariable进行注解.
下面看一个例子:
首先创建一个表单提交页面data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加用户</title> </head> <body> <form action="user/addUser" method="post"> 用户名:<input type="text" name="name" /><br/> 年龄:<input type="text" name="age" /> <input type="submit" value="提交" /> </form> </body> </html>
创建相应的控制器,这里表单提交到了user/addUser.写它对应的方法.
package gd.hz.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller("userController") @RequestMapping("user") public class UserController { @RequestMapping(value="addUser" , method=RequestMethod.POST) public ModelAndView addUser(String name , String age) { System.out.println("name--->" + name + "年龄--->" + age) ; return new ModelAndView("dataSuccess"); } }
我们把表单中的名为name和age与控制器中addUser方法中参数的name和age相对应.这样就spring就自动帮我们填充了数据.注意当参数名与表单中的名字不一样时可@RequestParam进行注解
当然也可以用对象的形式填充数据.
创建一个User类,生成相应的get set方法,属性名称与表单中的名称对应.
package gd.hz.springmvc.model; public class User { private String name ; private int age ; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
在Controller中这样写:
package gd.hz.springmvc.controller; import gd.hz.springmvc.model.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller("userController") @RequestMapping("user") public class UserController { //使用对象封装数据 @RequestMapping(value="addUser2" , method=RequestMethod.POST) public ModelAndView addUser2(User user) { System.out.println("name--->" + user.getName() + "年龄--->" + user.getAge()) ; return new ModelAndView("dataSuccess"); } }
将得到的数据返回到view当中:
最常用的是使用ModelAndView,它有很多重载的构造方法,可以返回字符串类型,也可以返回Map类型和Object类型,详细用法可以查看Spring 的API,下面举些例子.
@RequestMapping(value="addUser2" , method=RequestMethod.POST) public ModelAndView addUser2(User user) { System.out.println("name--->" + user.getName() + "年龄--->" + user.getAge()) ; return new ModelAndView("dataSuccess", "user" , user); }
@RequestMapping(value="addUser2" , method=RequestMethod.POST) public ModelAndView addUser2(User user) { System.out.println("name--->" + user.getName() + "年龄--->" + user.getAge()) ; ModelAndView model = new ModelAndView("dataSuccess"); model.addObject("user", user); return model; }
@RequestMapping(value="addUser2" , method=RequestMethod.POST) public ModelAndView addUser2(User user) { ModelAndView model = new ModelAndView("dataSuccess"); Map<String , User> users = new HashMap<String , User>(); model.addObject(users); return model; }
在视图界面我们可以用jstl获取数据.
例如前面第一种方法的user(注意这里的user是我们返回时定义的名称),${user.name}