国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

spring mvc4的日期/數字格式化、枚舉轉換示例

2019-11-26 13:12:06
字體:
來源:轉載
供稿:網友

日期、數字格式化顯示,是web開發中的常見需求,spring mvc采用XXXFormatter來處理,先看一個最基本的單元測試:

package com.cnblogs.yjmyzz.test;import java.math.BigDecimal;import java.util.Date;import java.util.Locale;import org.junit.Test;import org.springframework.context.i18n.LocaleContextHolder;import org.springframework.format.datetime.DateFormatter;import org.springframework.format.number.CurrencyFormatter;import org.springframework.format.support.DefaultFormattingConversionService;public class FormatterTest {  @Test  public void testFormatter() {        //設置上下語言的語言環境    LocaleContextHolder.setLocale(Locale.US);        //--------測試日期格式化----------    Date d = new Date();    DateFormatter dateFormatter = new DateFormatter();    //按中文格式輸出日期    System.out.println(dateFormatter.print(d, Locale.CHINESE));//2014-10-30          DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();    //添加前面的DateFormatter    conversionService.addFormatter(dateFormatter);        System.out.println(conversionService.convert(d, String.class));//Oct 30, 2014        dateFormatter.setPattern("yyyy年MM月dd日");        System.out.println(conversionService.convert(d, String.class));//2014年10月30日        // --------測試貨幣格式化-------------    CurrencyFormatter currencyFormatter = new CurrencyFormatter();    BigDecimal money = new BigDecimal(1234567.890);    System.out.println(currencyFormatter.print(money, Locale.CHINA));//¥1,234,567.89    conversionService.addFormatter(currencyFormatter);    System.out.println(conversionService.convert(money, String.class));//$1,234,567.89        }}

除了DateFormatter、CurrencyFormatter,常用還有的以下Formatter:

這些Formatter全都實現了接口org.springframework.format.Formatter<T>,web開發中使用起來很方便:

一、先在servlet-context.xml中參考下面的內容,修改配置:

 <mvc:annotation-driven  conversion-service="conversionService" />   <bean id="conversionService"     class="org.springframework.format.support.FormattingConversionServiceFactoryBean">      </bean>

二、dto類中,在需要設置格式化的字段上,打上相關的注解

@NumberFormat(style=Style.CURRENCY)  //@NumberFormat(pattern="#,###.00")  double amount;    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  Date createTime;

三、jsp頁面上,使用<spring:eval />標簽綁定

<spring:eval expression="c.amount" />         <spring:eval expression="c.createTime" />

四、枚舉問題

表單提交的html頁面中,經常會遇到一些諸如:性別(男、女) 的RadioButton組,背后通常對應Enum,表單提交的是String,默認情況下并不能自動映射成Model中的Enum成員,需要額外的Converter處理

4.1 先定義一個基本的枚舉

package com.cnblogs.yjmyzz.enums;public enum SEX {  /**   * 男   */  Male("1", "男"),  /**   * 女   */  Female("-1", "女"),  /**   * 保密   */  Unknown("0", "保密");  private final String value;  private final String description;  private SEX(String v, String desc) {    this.value = v;    this.description = desc;  }  public String getValue() {    return value;  }  public String getDescription() {    return description;  }  public static SEX get(String strValue) {    for (SEX e : values()) {      if (e.getValue().equals(strValue)) {        return e;      }    }    return null;  }  @Override  public String toString() {    return this.value;  }}

保存到db中時,性別字段我們希望"男"存成"1","女"存成"-1","保密"存成"0"(當然,這只是個人喜好,僅供參考)

4.2 定義SEX枚舉的Converter

package com.cnblogs.yjmyzz.convertor;import org.springframework.core.convert.converter.Converter;import com.cnblogs.yjmyzz.enums.SEX;public class String2SexConvertor implements Converter<String, SEX> {  @Override  public SEX convert(String enumValueStr) {    String value = enumValueStr.trim();    if (value.isEmpty()) {      return null;    }    return SEX.get(enumValueStr);  }}

代碼很短,不多解釋,Convert方法,完成類似 "1" -> SEX.Male的轉換

4.3 配置修改

<bean id="conversionService"    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">    <property name="converters">      <set>        <bean class="com.cnblogs.yjmyzz.convertor.String2SexConvertor" />      </set>    </property>  </bean>

只需要在剛才的conversionService加上自己的Converter就行

4.4 form頁面上的綁定示例:

<form:radiobuttons path="sex" items="${sexMap}" delimiter=" " />

sexMap是ModelAndView中的一個屬性,參考代碼如下:

package com.cnblogs.yjmyzz.repository;import java.util.EnumSet;import java.util.HashMap;import java.util.Map;import com.cnblogs.yjmyzz.enums.SEX;public class EnumRepository {  static Map<String, String> sexMap = null;  public static Map<String, String> getSexMap() {    if (sexMap == null) {      sexMap = new HashMap<String, String>();      EnumSet<SEX> sexs = EnumSet.allOf(SEX.class);      for (SEX sex : sexs) {        sexMap.put(sex.getValue(), sex.getDescription());      }    }    return sexMap;  }}

Action中,這樣寫:

@RequestMapping(value = "edit/{id}")  public ModelAndView edit(@PathVariable int id, HttpServletRequest request,      HttpServletResponse response) throws Exception {    ModelAndView model = new ModelAndView();    Order order = orderService.get(id + "");    model.addObject("sexMap", EnumRepository.getSexMap());//枚舉列表,便于頁面綁定    model.addObject("data", order);    model.setViewName("orders/edit");    return model;  }

4.5 頁面顯示時,如何轉義

就剛才的示例而言,性別“男”,對應SEX.Male,自定義值是"1",自定義描述是“男”,默認情況下${model.sex}顯示成Male,如果想顯示“自定義值”或“自定義描述”,不考慮國際化的話,直接調用value或description屬性即可,參考下面的內容:

${c.sex}/${c.sex.description}/${c.sex.value}

最終顯示成: Male/男/1

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商丘市| 城固县| 城步| 策勒县| 浙江省| 万安县| 梓潼县| 离岛区| 屯留县| 无锡市| 大姚县| 琼中| 墨脱县| 青冈县| 堆龙德庆县| 宁德市| 辽宁省| 沈阳市| 阿城市| 宿松县| 琼结县| 龙游县| 松阳县| 沈丘县| 陇川县| 南陵县| 珠海市| 珲春市| 哈尔滨市| 新民市| 汉寿县| 临颍县| 栾城县| 宜兴市| 乌审旗| 沙田区| 遂昌县| 贵德县| 马山县| 玛纳斯县| 开化县|