spring mvc 4 의 날짜/디지털 포맷,매 거 진 변환 예시

날짜,디지털 포맷 디 스 플레이 는 웹 개발 에서 흔히 볼 수 있 는 수요 입 니 다.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,Currency Formatter 외 에 도 다음 과 같은 Formatter 를 자주 사용 합 니 다.

이 Formatter 들 은 모두 인터페이스 org.springframework.format.Formatter를 실현 하여 웹 개발 에 편리 하 게 사용 할 수 있 습 니 다.
1.servlet-context.xml 에서 아래 내용 을 참고 하여 설정 을 수정 합 니 다.

 <mvc:annotation-driven  conversion-service="conversionService" />
 
  <bean id="conversionService"
     class="org.springframework.format.support.FormattingConversionServiceFactoryBean">    
  </bean>
2.dto 클래스 에서 포맷 이 필요 한 필드 에 관련 주 해 를 달 아야 합 니 다.

@NumberFormat(style=Style.CURRENCY)
  //@NumberFormat(pattern="#,###.00")
  double amount;  

  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  Date createTime;

3.jsp 페이지 에서탭 바 인 딩 사용

<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>
아까 conversion Service 에 자신의 Converter 만 넣 으 면 돼 요.
4.4 form 페이지 의 바 인 딩 예제:

<form:radiobuttons path="sex" items="${sexMap}" delimiter="&nbsp;" />
sexMap 은 Model AndView 의 속성 입 니 다.참고 코드 는 다음 과 같 습 니 다.

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}
남자
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기