SpringMVC返回類型


7.SpringMVC的返回值類型和參數傳遞

1SpringMVC的返回值類型

(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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM