springmvc學習筆記(11)-springmvc註解開發之簡單參數綁定

springmvc學習筆記(11)-springmvc註解開發之簡單參數綁定

標籤: springmvcjava


[TOC]git


本文主要介紹註解開發的簡單參數綁定,包括簡單類型、簡單pojo以及自定義綁定實現類型轉換github

spring參數綁定過程

從客戶端請求key/value數據,通過參數綁定,將key/value數據綁定到controller方法的形參上。spring

springmvc中,接收頁面提交的數據是經過方法形參來接收。而不是在controller類定義成員變動接收!!!!session

參數綁定過程

默認支持的類型

直接在controller方法形參上定義下邊類型的對象,就能夠使用這些對象。在參數綁定過程當中,若是遇到下邊類型直接進行綁定。mvc

  • HttpServletRequest:經過request對象獲取請求信息
  • HttpServletResponse:經過response處理響應信息
  • HttpSession:經過session對象獲得session中存放的對象
  • Model/ModelMap:model是一個接口,modelMap是一個接口實現。做用:將model數據填充到request域。

簡單類型

經過@RequestParam對簡單類型的參數進行綁定。若是不使用@RequestParam,要求request傳入參數名稱和controller方法的形參名稱一致,方可綁定成功。app

若是使用@RequestParam,不用限制request傳入參數名稱和controller方法的形參名稱一致。框架

經過required屬性指定參數是否必需要傳入,若是設置爲true,沒有傳入參數,報下邊錯誤:jsp

指定傳入參數未傳入報錯

@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
//@RequestParam裏邊指定request傳入參數名稱和形參進行綁定。
//經過required屬性指定參數是否必需要傳入
//經過defaultValue能夠設置默認值,若是id參數沒有傳入,將默認值和形參綁定。
public String editItems(Model model,@RequestParam(value="id",required=true) Integer items_id)throws Exception {

pojo綁定

頁面中input的name和controller的pojo形參中的屬性名稱一致,將頁面中數據綁定到pojo。學習

注意:這裏只是要求name和形參的屬性名一致,而不是要求和形參的名稱一致,這點不要混淆了,框架會進入形參內部自動匹配pojo類的屬性名。(我沒看源碼,但應該是用反射實現的)

頁面定義:

<table width="100%" border=1>
<tr>
	<td>商品名稱</td>
	<td><input type="text" name="name" value="${itemsCustom.name }"/></td>
</tr>
<tr>
	<td>商品價格</td>
	<td><input type="text" name="price" value="${itemsCustom.price }"/></td>
</tr>

controller的pojo形參的定義:

public class Items {
    private Integer id;

    private String name;

    private Float price;

    private String pic;

    private Date createtime;

    private String detail;

自定義參數綁定實現日期類型綁定

對於controller形參中pojo對象,若是屬性中有日期類型,須要自定義參數綁定。

將請求日期數據串傳成日期類型,要轉換的日期類型和pojo中日期屬性的類型保持一致。本文示例中,自定義參數綁定將日期串轉成java.util.Date類型。

須要向處理器適配器中注入自定義的參數綁定組件。

  • 自定義日期類型綁定
public class CustomDateConverter implements Converter<String,Date>{
    public Date convert(String s) {
        //實現 將日期串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {
            //轉成直接返回
            return simpleDateFormat.parse(s);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //若是參數綁定失敗返回null
        return null;

    }
}
  • 配置方式
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 自定義參數綁定 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 轉換器 -->
        <property name="converters">
            <list>
                <!-- 日期類型轉換 -->
                <bean class="com.iot.learnssm.firstssm.controller.converter.CustomDateConverter"/>
           </list>
        </property>
    </bean>

springmvc和struts2的區別

  • 1.springmvc基於方法開發的,struts2基於類開發的。

springmvc將url和controller方法映射。映射成功後springmvc生成一個Handler對象,對象中只包括了一個method。方法執行結束,形參數據銷燬。springmvc的controller開發相似service開發。

  • 2.springmvc能夠進行單例開發,而且建議使用單例開發,struts2經過類的成員變量接收參數,沒法使用單例,只能使用多例。

  • 3.通過實際測試,struts2速度慢,在於使用struts標籤,若是使用struts建議使用jstl。


做者@brianway更多文章:我的網站 | CSDN | oschina

相關文章
相關標籤/搜索