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