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