SpringMVC的返回值类型及参数传递

SpringMVC的返回值类型和参数传递

1、SpringMVC的返回值类型

(1)ModelAndView返回值类型:

  1.1当返回为null时,页面不跳转。

  1.2当返回值没有指定视图名时,默认使用请求名作为视图名进行跳转。

  1.3当返回值指定了视图名,程序会按照视图名跳转。

 

 

/*添加*/

@RequestMapping("/getSale")

public ModelAndView addSale(Sale sale,HttpServletRequest request,ModelAndView mv){

    if (sale!=null) {

        Double totalPrice = sale.getPrice() * sale.getQuantity();

        sale.setTotalPrice(totalPrice);

        sale.setSaleDate(new Date());

        Users user = (Users) request.getSession().getAttribute("user");

        sale.setUserId(user.getUid());

        int i = userService.addSale(sale);

        if (i > 0) {

            mv.setViewName("saleList");

        } else {

            mv.setViewName("prodectAdd");

        }

    }

    return mv;

}

 

 

(2)Object返回值类型

 

/*绑定下拉框*/

@RequestMapping("/prodectName")

@ResponseBody

public Object getprodectName(){

    List<Product> products = userService.getproductName();

    return products;

}

 

(3)String返回值类型:

3.1如果返回值为null,那么以请求名作为视图名进行跳转;

3.2如果指定返回值,那么按照指定返回值作为视图名进行跳转,可以通过model,modeMap携带数据。

3.3如果返回值带有forward或者redirect前缀,那么将会进行相应的请求或重定向,不过不能通过mvc的数据模型携带数据,可以通过ServletApi携带数据。

@RequestMapping("/welcome")

public String welcome(String userName, Model model){

    //将用户名保存到对应的作用域中

    model.addAttribute("userName",userName);

    return "welcome";

}

2.参数传递

(1)JSP页面注意点*:控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致

 

<form class="loginForm" action="/user/getUser" method="post" >

    <div class="inputbox"  style="text-align:center; ">

        <label for="user">用户名:</label>

        <input id="user" type="text" name="userName" placeholder="请输入用户名" />

    </div>

    <div class="password"  style="text-align:center; " >

        <label for="mima">密码:</label>

        <input id="mima" type="password" name="password" placeholder="请输入密码" />

    </div>

    <div class="subBtn"  style="text-align:center; ">

        <input type="submit" value="登录" />

        <input type="reset" value="重置"/>

    </div>

</form>

 

 

/*登录*/

@RequestMapping("/getUser")

@ResponseBody

private ModelAndView getUser(String userName, String password, ModelAndView mv, HttpServletRequest request, HttpServletResponse response, HttpSession session){

    Users user = userService.getUser(userName,password);

    System.out.println("user======"+user);

    if (user!=null){

        System.out.println("成功");

        //登录成功

      request.getSession().setAttribute("user",user);

        //转发

        mv.setViewName("index");

    }else{

        //登录失败

        mv.setViewName("login");

    }

    return mv;

}

 

(2)请求参数装配为POJO对象

新增Person

public class Person {

    private String username;

    private int age;

    //省略get/set方法

}

控制器

//当实体类中的属性名和表单元素的name属性相同时,即可完成自动装配

@RequestMapping(value = "personObject",method = RequestMethod.POST)

public String personObject(Person person){

    System.out.println(person);

    return "hello";

}

(3)@RequestParam注解

@RequestParam的作用是,当表单元素与控制器方法的参数不匹配的情况下,使用@RequestParam注解声明参数名称。

@RequestParam 有三个属性:

  3.1value:请求参数名(必须配置)

  3.2required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)

  3.3defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)

 jsp页面

 

<form class="loginForm" action="/getUser" method="post" onsubmit="return check()" >

    <div class="inputbox"  style="text-align:center; ">

        <label for="user">用户名:</label>

        <input id="user" type="text" name="userName" placeholder="请输入用户名" />

    </div>

    <div class="password"  style="text-align:center; " >

        <label for="mima">密码:</label>

        <input id="mima" type="password" name="password" placeholder="请输入密码" />

    </div>

    <div class="subBtn"  style="text-align:center; ">

        <input type="submit" value="登录" />

        <input type="reset" value="重置"/>

    </div>

</form>

 

控制器

 

<form class="loginForm" action="/getUser" method="post" onsubmit="return check()" >

    <div class="inputbox"  style="text-align:center; ">

        <label for="user">用户名:</label>

        <input id="user" type="text" name="userName" placeholder="请输入用户名" />

    </div>

    <div class="password"  style="text-align:center; " >

        <label for="mima">密码:</label>

        <input id="mima" type="password" name="password" placeholder="请输入密码" />

    </div>

    <div class="subBtn"  style="text-align:center; ">

        <input type="submit" value="登录" />

        <input type="reset" value="重置"/>

    </div>

</form>

 

 

(4)RESTFUL风格的参数传递

 

/*{id}表示占位符*/

@RequestMapping("/getid/{id}")

@ResponseBody

public Object getid(@PathVariable("id") Integer id){

    List<Accounts> name = accountService.getName(id);

    return name;

}

 

 

(5)对象传递参数


IUserInfo实体类:

 

package com.cmy.entity;

import java.util.ArrayList;

import java.util.List;

public class IUserInfo {

    private  int uid;

    private String username;

    //域属性注入

    private Teacher teacher;

    private List<Teacher> teacherList;

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public int getUid() {

        return uid;

    }

    public void setUid(int uid) {

        this.uid = uid;

    }

    public Teacher getTeacher() {

        return teacher;

    }

    public void setTeacher(Teacher teacher) {

        this.teacher = teacher;

    }

    public List<Teacher> getTeacherList() {

        return teacherList;

    }

 

    public void setTeacherList(List<Teacher> teacherList) {

        this.teacherList = teacherList;

    }

    @Override

    public String toString() {

        return "IUserInfo{" +

                "uid=" + uid +

                ", username='" + username + '\'' +

                ", teacher=" + teacher +

                ", teacherList=" + teacherList +

                '}';

    }

}

 

控制层

 

@Controller

@RequestMapping("/fout")

public class FoutController {//属性

    @RequestMapping("/getUser")

    public String getUser(IUserInfo userInfo){

        System.out.println(userInfo.toString());

        return "welcome";

    }

}

 

页面

域属性1

 

<form class="loginForm" action="/fout/getUser" method="post" onsubmit="return check()" >

<div class="inputbox" style="text-align:center; ">

 <label for="user">用户名:</label>

 <input id="user" type="text" name="teacher.teachername" placeholder="请输入用户名" />

<input id="users" type="text" name="teacher.teachername" placeholder="请输入用户名" />

 </div>

<div class="password" style="text-align:center; " >

<label for="mima">密码:</label>

<input id="mima" type="password" name="password" placeholder="请输入密码" />

</div>

 <div class="subBtn" style="text-align:center; ">

<input type="submit" value="登录" />

 <input type="reset" value="重置"/>

</div>

</form>

 

集合2

 

<form class="loginForm" action="/fout/getUser" method="post" onsubmit="return check()" >

            <div class="inputbox"  style="text-align:center; ">

                <label for="user">用户名:</label>

                <input id="user" type="text" name="teacherList[0].teachername" placeholder="请输入用户名" />

                <input id="users" type="text" name="teacherList[1].teachername" placeholder="请输入用户名" />

            </div>

            <div class="password"  style="text-align:center; " >

 

 

                <label for="mima">密码:</label>

                <input id="mima" type="password" name="password" placeholder="请输入密码" /></div>

            <div class="subBtn"  style="text-align:center; ">

                <input type="submit" value="登录" />

                <input type="reset" value="重置"/>

            </div>

        </form>

 

 

猜你喜欢

转载自www.cnblogs.com/wangdayexinyue/p/11834741.html