首頁  >  文章  >  Java  >  SpringMVC學習系列(4) 之 資料綁定-1

SpringMVC學習系列(4) 之 資料綁定-1

黄舟
黄舟原創
2017-03-03 10:52:081454瀏覽

在系列(SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1)中我們介紹了請求是如何映射到一個action上的,下一步當然是如何獲取到請求中的數據,這就引出了本篇所要講的內容—數據綁定。

首先看一下都有哪些綁定數據的註解:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@RequestParam,綁定單一請求數據,可以是URL中的數據,表單提交的數據或上傳的文件; 
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@PathVariable,綁定URL範本變數值; 
SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@CookieValue,綁定Cookie資料; 
SpringMVC學習系列(4) 之 資料綁定-1.@RequestHeader,綁定請求頭資料; 
#5.@ModelAttribute ,綁定資料到Model; 
6.@SessionAttributes,綁定資料到Session; 
7.@RequestBody,用來處理Content-Type不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等; 
8.@RequestPart,綁定「multipart/data」數據,並可以根據資料型別進項物件轉換;

在下面我們來看如何使用:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.@RequestParam:

為了驗證檔案綁定我們需要先做以下工作:

a.把commons-fileupload-SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.jar和commons-io- SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.SpringMVC學習系列(4) 之 資料綁定-1.jar兩個jar包加入到我們專案。

b.設定我們專案中的springservlet-config.xml檔案使其支援檔案上傳,內容如下:


<!-- 支持上传文件 -->  <bean>  
    <!-- 设置上传文件的最大尺寸为SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1MB -->  
    <property>  
        <value>SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-10SpringMVC學習系列(4) 之 資料綁定-18576</value>  
    </property>
    <property> 
        <value>UTF-8</value> 
    </property></bean>


##其中

maxUploadSize用來限制上傳檔案的最大大小,也可以不做設置,這樣就代表上傳檔案的大小木有限制。 defaultEncoding用於設定上傳檔案的編碼格式,用於解決上傳的檔案中文名亂碼問題。

下面就看具體如何使用:

新增一個DataBindController,裡面有SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1個paramBind的action分別對應get和post請求:

package com.demo.web.controllers;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/databind")public class DataBindController {

    @RequestMapping(value="/parambind", method = {RequestMethod.GET})    public ModelAndView paramBind(){
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.setViewName("parambind");  
        return modelAndView;
    }
    
    @RequestMapping(value="/parambind", method = {RequestMethod.POST})    public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam") String formParam, @RequestParam("formFile") MultipartFile formFile){        
        //如果不用注解自动绑定,我们还可以像下面一样手动获取数据
         String urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);
        String formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ServletRequestUtils.getStringParameter(request, "formParam", null);
        MultipartFile formFileSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 = ((MultipartHttpServletRequest) request).getFile("formFile"); 
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("urlParam", urlParam);  
        modelAndView.addObject("formParam", formParam);  
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());  
        
        modelAndView.addObject("urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1);  
        modelAndView.addObject("formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1);  
        modelAndView.addObject("formFileNameSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1", formFileSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.getOriginalFilename());  
        modelAndView.setViewName("parambindresult");  
        return modelAndView;
    }
        
}


#在views資料夾中加入parambind.jsp和parambindresult.jsp兩個視圖,內容分別如下:


nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
    
          
          
             
  


nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
    自动绑定数据:

    ${urlParam}
    ${formParam}
    ${formFileName}



    手动获取数据:

    ${urlParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}
    ${formParamSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}
    ${formFileNameSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1}


執行項目,輸入內容,選擇上傳檔案:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1

#提交檢視結果:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1

可以看到綁定的資料已經取得到了。

上面我們示範如何把資料綁定到單一變量,但在實際應用中我們通常需要取得的是model對象,別擔心,我們不需要把資料綁定到一個個變數然後在對model賦值,只要把model加入對應的action參數(這裡不需要指定綁定資料的註解)Spring MVC會自動進行資料轉換並綁定到model物件上,一切就是這麼簡單。測試如下:

添加一个AccountModel类作为测试的model:


package com.demo.web.models;public class AccountModel {    
    private String username;    private String password;    
    public void setUsername(String username){        this.username=username;
    }    public void setPassword(String password){        this.password=password;
    }    
    public String getUsername(){        return this.username;
    }    public String getPassword(){        return this.password;
    }
}

在DataBindController里面添加SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个modelAutoBind的action分别对应get和post请求:


@RequestMapping(value="/modelautobind", method = {RequestMethod.GET})public String modelAutoBind(HttpServletRequest request, Model model){
    
    model.addAttribute("accountmodel", new AccountModel());    return "modelautobind";
}

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){
    
    model.addAttribute("accountmodel", accountModel);    return "modelautobindresult";
}


在views文件夹中添加modelautobind.jsp和modelautobindresult.jsp SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个视图用于提交数据和展示提交的数据:

modelautobind.jsp:

nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
    
              用户名:
        密 码:
             
  

modelautobindresult.jsp :

nbsp;html PUBLIC "-//WSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1C//DTD HTML SpringMVC學習系列(4) 之 資料綁定-1.0SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1 Transitional//EN" "http://www.wSpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.org/TR/htmlSpringMVC學習系列(4) 之 資料綁定-1/loose.dtd"><meta><title>Insert title here</title>
    用户名:${accountmodel.username}
    密 码:${accountmodel.password}


运行测试:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1

用户名 输入AAA 密码 输入BBB,提交:

SpringMVC學習系列(4) 之 資料綁定-1

可以看到结果显示正确,说明自动绑定成功。

注:

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.关于@RequestParam的参数,这是一个@RequestParam的完整写法@RequestParam(value="username", required=true, defaultValue="AAA")。

value表示要绑定请求中参数的名字;

required表示请求中是否必须有这个参数,默认为true这是如果请求中没有要绑定的参数则返回SpringMVC學習系列(4) 之 資料綁定-10SpringMVC學習系列(4) 之 資料綁定-1;

defaultValue表示如果请求中指定的参数值为空时的默认值;

要绑定的参数如果是值类型必须要有值否则抛异常,如果是引用类型则默认为null(Boolean除外,默认为false);

 

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.在刚才添加的SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1个action中可以看到返回类型和以前的不一样了由ModelAndView变成了String,这是由于Spring MVC 提供Model、ModelMap、Map让我们可以直接添加渲染视图需要的模型数据,在返回时直接指定对应视图名称就可以了。同时Map是继承于ModelMap的,而Model和ModelMap是继承于ExtendedModelMap的。

 

SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1.在剛剛新增的檢視modelautobind.jsp中可以看到form:formform:input 等標籤,這是Spring MVC提供的表單標籤,借助於這些標籤我們可以很方便的把模型資料綁定到表單上面(當然你也可以選擇繼續使用原生的HTML表單標籤),要使用Spring MVC只要在檢視中加入引用 @ taglib prefix="##form#" uri="#http://www.php.cn/" %>即可,關於Spring MVC表單標籤的具體內容會在以後的文章中作介紹。

 

 以上就是SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之資料綁定-SpringMVC學習系列(SpringMVC學習系列(4) 之 資料綁定-1) 之 資料綁定-1的內容,更多相關內容請關注PHP中文網(www. php.cn)!



#

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn