spring mvc4的日期/数字格式化、枚举转换示例 - 网站

spring mvc4的日期/数字格式化、枚举转换示例

分类:Java · 发布时间:2021-10-12 14:09 · 阅读:4526

本篇文章主要介绍了spring mvc4的日期/数字格式化、枚举转换示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

日期、数字格式化显示,是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,web开发中使用起来很方便:

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

  

二、dto类中,在需要设置格式化的字段上,打上相关的注解

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

三、jsp页面上,使用标签绑定

 

四、枚举问题

表单提交的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 { @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 配置修改

    

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

4.4 form页面上的绑定示例:

 

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 sexMap = null; public static Map getSexMap() { if (sexMap == null) { sexMap = new HashMap(); EnumSet 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

标签:
springmvc 日期转换

相关文章

Java lombok中@Accessors注解三个属性的作用

这篇文章主要介绍了Java lombok的@Accessors注解属性解析,该注解主要作用是:当属性字段在生成 getter 和 setter 方法时,做一些相关的设置,需要的朋友可以参考下

java项目实现统一打印入参出参等日志

这篇文章主要介绍了java项目实现统一打印入参出参等日志方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

基于jdk动态代理和cglib动态代理实现及区别说明

这篇文章主要介绍了基于jdk动态代理和cglib动态代理实现及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java如何获得redis所有的key-value

这篇文章主要介绍了java如何获得redis所有的key-value,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis中的动态sql问题

这篇文章主要介绍了mybatis中的动态sql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回分类 返回首页