SpringMVC(三) —— 參數綁定和數據回顯


參數綁定的過程:就是頁面向后台傳遞參數,后台接受的一個過程。

默認支持的參數類型:(就是你在方法上以形參的形式去定義一下的類型,就可以直接使用它)

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • Model/ModelMap;前面這個是一個接口,后面試一個實現類。

    作用:就是把數據放到request域。

1.支持簡單的數據類型綁定:(頁面的name屬性必須和你定義的參數名一致)

  • Integer
  • String
  • ......

例:

1 public String test_user(int sid,String name){
2         //int sid等價於 request.getparameter("sid");
3         System.out.println(sid+"="+nam);
4         return "hello";
5     }

如果想要名字不一樣,要使用:@RequestParam

1 //value:對應頁面的name屬性
2 //required:是否必須
3 //defaultValue:默認值
4 public String test_user(@RequestParam(value="sid",required=true) int sbid,@RequestParam(value="name")String sbname){
5         System.out.println(sbid+"="+sbname);
6         return "hello";
7     }

2.參數綁定之——實體類

  有一個要求:實體類的屬性名必須和頁面的name值一樣。

  實體的屬性:

  頁面的name屬性:

  

當然,實體類的綁定和簡單數據類型的綁定不會相互影響,可以同時使用。

  

3.參數綁定之——包裝的實體類(pojo,entity)綁定

 Items.java

 1 package com.test.entity;
 2 
 3 public class Items {
 4     private Student student;
 5 
 6     public Student getStudent() {
 7         return student;
 8     }
 9 
10     public void setStudent(Student student) {
11         this.student = student;
12     }
13 
14 }

頁面寫法:

控制器寫法:

 

此時,我們會有這么一個疑問:明明可以直接用student,為什么要多一層的包裝?這就好比多褲子放屁多此一舉?答案當然不是,它這么做一定是有意思所在的。

下面我們來看一下案例:

案例1:

  學生有: name

  教師有: name

如果要求頁面同時向后台傳輸這兩個名字,那你后台到底怎么接受????

 案例2:

  做搜索的時候,多條件搜索(你能保證這些搜索條件都在一張表里面嗎?),根據班級名,學生姓名,學號,教師,教室。這個時候我們可以對其進行封裝,封裝一個QueryItems類,專門用於查詢。

4.參數綁定之——集合類型的綁定

  1. 數組類型的綁定:

    應用:批量刪除

    需求:首先出現一個頁面,里面有很多的數據,然后有一個批量刪除的按鈕,點擊的時候,把這些數據都刪了。

    頁面:

1 <c:forEach items="${list}" var="stu">
2     <tr>
3         <th><input type="checkbox" name="stu_id" value="${stu.sid }"> </th>
4         <th>${stu.sid }</th>
5         <th>${stu.name }</th>
6         <th>${stu.sex }</th>
7         <th>${stu.hobbies }</th>
8     </tr>
9 </c:forEach>

    控制器:

1 @RequestMapping(value="deletemore")
2     public String deletemore(int [] stu_id){
3         for (int i : stu_id) {
4             System.out.println(i);
5         }
6         return "studentlist";
7     }

  2.List類型的綁定:

    應用:類似一些教務管理系統:成績的批量錄入,對於成績的批量修改。

           需求:現在需要我完成一個系統,里面可以批量修改學生的信息。

    思路:到一個頁面,里面有一堆的學生要我們編輯,編輯完成點擊提交,這些數據就會提交到我們的后台。

    頁面:

        

       

        注意其中划線的地方連空格都不可以多加。

    控制器:

        

        

        要利用我們的包裝類進行傳輸數據,不可以直接在方法上面聲明形參。

    Items.java

 1 package com.test.entity;
 2 
 3 import java.util.List;
 4 
 5 public class Items {
 6     private Student student;
 7     private List<Student>list;//這個是批量修改學生的包裝類
 8     
 9 
10     public List<Student> getList() {
11         return list;
12     }
13 
14     public void setList(List<Student> list) {
15         this.list = list;
16     }
17 
18     public Student getStudent() {
19         return student;
20     }
21 
22     public void setStudent(Student student) {
23         this.student = student;
24     }
25     
26 }

  3.Map類型的綁定:類比上面的List,這里就不說了。

數據回顯 

1. springmvc會有自動回顯的類型實體類(pojo)

   實體類的數據會在頁面進入控制器后,springmvc會自動將自己的數據放到request作用域,並且他的key為該實體類的首字母小寫。Student student  User user

   有值的寫法:

      

     

   不按照首字母小寫的情況:(證實取不到值)

      

2.簡單的類型不會自動回顯

 

   簡單的類型就是:int,String,boolean……不會自動回顯,就用一下攜帶參數的手段進行數據回顯

3.常見的 攜帶參數的手段

    ModelAndView(數據是放在request的作用域)

1 //常見的構造使用
2 //1.空的
3 ModelAndView mv = new ModelAndView();
4 Map<String, Student>map=new HashMap<String, Student>();
5 mv.addAllObjects(map);
6 mv.setViewName("hello");
7 //2.new ModelAndView(viewName,數據);
8 ModelAndView mv1 = new ModelAndView("hello",map);

    Model/ModelMap:可以在該方法的形參中聲明,以下可以直接使用。

    @ModelAttribute可以把頁面接收的值放入到request作用域

1 @RequestMapping(value="model")
2 public String model(@ModelAttribute("stu") Student sb){
3     return "hello";
4 }

    @SessionAttributes:會自動把model中的數據放到session作用域。他是寫在類上面的,並且屬性名和model中的一致。

      Model中的名字叫  stu

1 @RequestMapping(value="model2")
2     public String model2(Model model){
3         Student student= new Student(1, "傻大個", "男", "李勝");
4         model.addAttribute("stu",student);
5         return "hello";
6     }

      聲明在類上,並且名字是stu

      

      Map:也是放在request作用域

        直接new一個Map<String, Student>mvp = new HashMap<String, Student>();是沒有辦法把值放到作用域的。我們需要在方法以形參的形式聲明,才會把值放到request作用域:

 


免責聲明!

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



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