spring mvc 4 의 날짜/디지털 포맷,매 거 진 변환 예시
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=" " />
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}
남자이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.