一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring mvc4的日期/數字格式化、枚舉轉換示例

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

2020-07-30 16:01楊俊明 Java教程

本篇文章主要介紹了spring mvc4的日期/數字格式化、枚舉轉換示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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:

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

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

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

?
1
2
3
4
5
<mvc:annotation-driven  conversion-service="conversionService" />
 
 <bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">   
 </bean>

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

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

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

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

四、枚舉問題

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

4.1 先定義一個基本的枚舉

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 配置修改

?
1
2
3
4
5
6
7
8
<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頁面上的綁定示例:

?
1
<form:radiobuttons path="sex" items="${sexMap}" delimiter="&nbsp;" />

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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中,這樣寫:

?
1
2
3
4
5
6
7
8
9
10
@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屬性即可,參考下面的內容:

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

最終顯示成: Male/男/1

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青精品| 亚洲一区二区三区久久精品 | 美女主播免费观看 | 亚洲高清国产拍精品动图 | 97久久天天综合色天天综合色hd | 国产在线观看99 | 精品亚洲永久免费精品 | 韩剧在线免费观看 | 欧美日韩成人在线视频 | 女主被男主做哭失禁高h | 成人在线播放 | sex5·性屋娱乐| 亚洲AV中文字幕无码久久 | 好大好爽好硬我要喷水了 | 嗯啊好爽视频 | 欧美日韩精品一区二区三区视频播放 | 欧美成人免费草草影院视频 | 久久国产乱子伦精品免费不卡 | 啪啪免费入口网站 | 青青国产精品 | 成人私人影院在线观看网址 | 日产乱码卡1卡2卡三卡四在线 | 欧美高清国产 | 国产日韩精品欧美一区 | 美女牲交毛片一级视频 | 国产精品福利在线观看秒播 | 小舞丝袜调教喷水沦为肉奴 | 短篇最污的乱淫伦小说全集 | 超级毛片 | 欧美xxxxx九色视频免费观看 | 513热点 | 国产精品毛片久久久久久久 | 97超pen个人视频公开视频视 | chinese壮直男gay老年人 | 极品美女写真菠萝蜜视频 | 深夜免费在线观看 | 亚洲国产综合久久久无码色伦 | 精品午夜久久网成年网 | hd最新国产人妖ts视频 | 视频在线观看入口一二三2021 | 成年人在线播放视频 |