JavaEE——SpringMVC(7)--數據轉換 & 數據格式化 & 數據校驗

mvc:annotation-driven
<mvc:annotation-driven /> 會自動註冊java

  RequestMappingHandlerMappingmvc

  RequestMappingHandlerAdapter app

  ExceptionHandlerExceptionResolver 三個bean。
• 還將提供如下支持:
  – 支持使用 ConversionService 實例對錶單參數進行類型轉換
  – 支持使用 @NumberFormat annotation、@DateTimeFormat註解完成數據類型的格式化
  – 支持使用 @Valid 註解對 JavaBean 實例進行 JSR 303 驗證
  – 支持使用 @RequestBody 和 @ResponseBody 註解框架

@InitBinder
• 由 @InitBinder 標識的方法,能夠對 WebDataBinder對象進行初始化。WebDataBinder 是 DataBinder 的子類,用於完成由表單字段到 JavaBean 屬性的綁定
• @InitBinder方法不能有返回值,它必須聲明爲void。
• @InitBinder方法的參spa

數一般是是 WebDataBinderhibernate

數據格式化
• 對屬性對象的輸入/輸出進行格式化,從其本質上講依然屬於 「類型轉換」 的範疇。
• Spring 在格式化模塊中定義了一個實現ConversionService 接口的FormattingConversionService 實現類,該實現類擴展了 GenericConversionService,所以它既具備類型轉換的功能,又具備格式化的功能
• FormattingConversionService 擁有一個FormattingConversionServiceFactroyBean 工廠類後者用於在 Spring 上下文中構造前者code

FormattingConversionServiceFactroyBean 內部已經註冊了 :
  – NumberFormatAnnotationFormatterFactroy:支持對數字類型的屬性使用 @NumberFormat 註解
  – JodaDateTimeFormatAnnotationFormatterFactroy:支持對日期類型的屬性使用 @DateTimeFormat 註解orm

  日期格式化
對象

  @DateTimeFormat 註解可對java.util.Date、java.util.Calendar、java.long.Long 時間類型進行標註:
    – pattern 屬性:類型爲字符串。指定解析/格式化字段數據的模式,如:」yyyy-MM-dd hh:mm:ss」
    – iso 屬性:類型爲 DateTimeFormat.ISO。指定解析/格式化字段數據的ISO模式,包括四種:ISO.NONE(不使用) -- 默認、ISO.DATE(yyyy-MM-dd) 、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
    – style 屬性:字符串類型。經過樣式指定日期時間的格式,由兩位字符組成,第一位表示日期的格式,第二位表示時間的格式:S:短日期/時間格式、M:中日期/時間格式、L:長日期/時間格式、F:完整日期/時間格式、-:忽略日期或時間格式blog

@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;

 

  數值格式化
    @NumberFormat 可對相似數字類型的屬性進行標註,它擁有兩個互斥的屬性:
      – style:類型爲 NumberFormat.Style。用於指定樣式類型,包括三種:Style.NUMBER(正常數字類型)、Style.CURRENCY(貨幣類型)、 Style.PERCENT(百分數類型)
      – pattern:類型爲 String,自定義樣式,如patter="#,###";

@NumberFormat(pattern="#,###,###.#")
private Float salary;

  

數據校驗

JSR 303 是 Java 爲 Bean 數據合法性校驗提供的標準框架,它已經包含在 JavaEE 6.0 中 .
• JSR 303 經過在 Bean 屬性上標註相似於 @NotNull、@Max等標準的註解指定校驗規則,並經過標準的驗證接口對 Bean進行驗證

Hibernate Validator 擴展註解
• Hibernate Validator 是 JSR 303 的一個參考實現,除支持全部標準的校驗註解外,它還支持如下的擴展註解

 1).如何校驗:

  ①. 使用 JSR 303 驗證標準
  ②. 加入 hibernate validator 驗證框架的 jar 包

  ③. 在 SpringMVC 配置文件中添加 <mvc:annotation-driven />
  ④. 須要在 bean 的屬性上添加對應的註解

 

  ⑤. 在目標方法 bean 類型的前面添加 @Valid 註解

 

 2). 驗證出錯轉向到哪個頁面 ?

注意: 需校驗的 Bean 對象和其綁定結果對象或錯誤對象時成對出現的,它們之間不容許聲明其餘的入參

/*保存新添加的員工信息*/
    @RequestMapping(value="/emp", method = RequestMethod.POST)
    public String save(@Valid Employee employee, BindingResult bindingResult,
                       Map<String, Object> map) {
        System.out.println("add" + employee);

        if(bindingResult.getErrorCount() > 0){
            System.out.println("出錯了");

            for(FieldError error: bindingResult.getFieldErrors()){
                System.out.println(error.getField() + ": " + error.getDefaultMessage());
            }

            //若驗證出錯, 則轉向定製的頁面
            map.put("departments", departmentDao.getDepartments());
            return "input";
        }

  

 3). 在頁面上顯示錯誤
• Spring MVC 除了會將表單/命令對象的校驗結果保存到對應的 BindingResult 或 Errors 對象中外,還會將全部校驗結果保存到 「隱含模型」
• 即便處理方法的簽名中沒有對應於表單/命令對象的結果入參,校驗結果也會保存在 「隱含對象」 中。
• 隱含模型中的全部數據最終將經過 HttpServletRequest 的屬性列表暴露給 JSP 視圖對象,所以在 JSP 中能夠獲取錯誤信息
• 在 JSP 頁面上可經過 <form:errors path=「userName」>顯示錯誤消息

相關文章
相關標籤/搜索