시리즈 (6)에서는 제출된 데이터의 정확성을 확인하는 방법을 소개했습니다. 데이터가 확인을 통과하면 해당 데이터가 저장됩니다. 저장된 데이터는 향후 표시에 사용되며, 이는 저장 값입니다. 그러면 표시할 때 필요에 따라 표시하는 방법은 무엇입니까? (예: 특정 소수 자릿수, 지정된 형식의 날짜 등을 유지합니다.) 이것이 바로 이 기사의 내용입니다. —>형식화된 디스플레이.
Spring SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명부터. 변환을 위해 Formatter SPI는 Converter SPI의 캡슐화이며 내부 변환은 여전히 Converter SPI에 의해 완료됩니다.
다음은 요청과 모델 객체 간의 간단한 변환 프로세스입니다.
Spring은 객체 구문 분석 및 서식 지정을 완료하기 위해 FormattingConversionService 및 DefaultFormattingConversionService를 제공합니다. Spring의 내장 포맷터 SPI 중 일부는 다음과 같습니다:
名称 | 功能 |
NumberFormatter | 实现Number与String之间的解析与格式化 |
CurrencyFormatter | 实现Number与String之间的解析与格式化(带货币符号) |
PercentFormatter | 实现Number与String之间的解析与格式化(带百分数符号) |
DateFormatter | 实现Date与String之间的解析与格式化 |
NumberFormatAnnotationFormatterFactory | @NumberFormat注解,实现Number与String之间的解析与格式化,可以通过指定style来指示要转换的格式(Style.Number/Style.Currency/Style.Percent),当然也可以指定pattern(如pattern=“#.##”(保留SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명位小数) ),这样pattern指定的格式会覆盖掉Style指定的格式 |
JodaDateTimeFormatAnnotationFormatterFactory | @DateTimeFormat注解,实现日期类型与String之间的解析与格式化这里的日期类型包括Date、Calendar、Long以及Joda的日期类型。必须在项目中添加Joda-Time包 |
데모를 시작해 보겠습니다.
먼저 이전 프로젝트에 Joda-time-SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.jar을 추가합니다. views 폴더에 formattest.jsp 보기를 추가합니다. 내용은 다음과 같습니다.
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명C//DTD HTML SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.0SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명 Transitional//EN" "http://www.wSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.org/TR/htmlSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명/loose.dtd"><meta><title>Insert title here</title>
money:<br>${contentModel.money}<br> date:<br>${contentModel.date}<br>
SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명. 먼저 데모를 위해 Formatter를 직접 사용하고, com.demo.web.models 패키지에 FormatModel.java를 다음과 같이 추가합니다. :
package com.demo.web.models;public class FormatModel{ private String money; private String date; public String getMoney(){ return money; } public String getDate(){ return date; } public void setMoney(String money){ this.money=money; } public void setDate(String date){ this.date=date; } }
com.demo.web.controllers 패키지에 다음 내용으로 FormatController.java를 추가합니다.
package com.demo.web.controllers;import java.math.RoundingMode;import java.util.Date;import java.util.Locale;import org.springframework.context.iSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명8n.LocaleContextHolder;import org.springframework.format.datetime.DateFormatter;import org.springframework.format.number.CurrencyFormatter;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.FormatModel; @Controller @RequestMapping(value = "/format")public class FormatController { @RequestMapping(value="/test", method = {RequestMethod.GET}) public String test(Model model) throws NoSuchFieldException, SecurityException{ if(!model.containsAttribute("contentModel")){ FormatModel formatModel=new FormatModel(); CurrencyFormatter currencyFormatter = new CurrencyFormatter(); currencyFormatter.setFractionDigits(SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명);//保留SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명位小数 currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);//向(距离)最近的一边舍入,如果两边(的距离)是相等的则向上舍入(四舍五入) DateFormatter dateFormatter=new DateFormatter(); dateFormatter.setPattern("yyyy-MM-dd HH:mm:ss"); Locale locale=LocaleContextHolder.getLocale(); formatModel.setMoney(currencyFormatter.print(SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명5.678, locale)); formatModel.setDate(dateFormatter.print(new Date(), locale)); model.addAttribute("contentModel", formatModel); } return "formattest"; } }
테스트 실행:
브라우저 기본 언어 변경:
페이지 새로 고침:
SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명. 이번에는 데모를 위해 DefaultFormattingConversionService를 사용하고 FormatController.java를 다음 콘텐츠로 변경합니다.
package com.demo.web.controllers;import java.math.RoundingMode;import java.util.Date;import org.springframework.format.datetime.DateFormatter;import org.springframework.format.number.CurrencyFormatter;import org.springframework.format.support.DefaultFormattingConversionService;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.FormatModel; @Controller @RequestMapping(value = "/format")public class FormatController { @RequestMapping(value="/test", method = {RequestMethod.GET}) public String test(Model model) throws NoSuchFieldException, SecurityException{ if(!model.containsAttribute("contentModel")){ FormatModel formatModel=new FormatModel(); CurrencyFormatter currencyFormatter = new CurrencyFormatter(); currencyFormatter.setFractionDigits(SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명);//保留SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명位小数 currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);//向(距离)最近的一边舍入,如果两边(的距离)是相等的则向上舍入(四舍五入) DateFormatter dateFormatter=new DateFormatter(); dateFormatter.setPattern("yyyy-MM-dd HH:mm:ss"); DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(); conversionService.addFormatter(currencyFormatter); conversionService.addFormatter(dateFormatter); formatModel.setMoney(conversionService.convert(SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명5.678, String.class)); formatModel.setDate(conversionService.convert(new Date(), String.class)); model.addAttribute("contentModel", formatModel); } return "formattest"; } }
이번에는 Locale이 없습니다. locale=LocaleContextHolder.getLocale( ); 테스트를 다시 실행하고 언어를 변경하고 새로 고치면 첫 번째 메소드의 스크린샷과 동일한 효과를 볼 수 있는데, 이는 DefaultFormattingConversionService가 요청한 정보에 따라 해당 형식을 자동으로 반환한다는 것을 나타냅니다. 브라우저.
SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명. 아... 그냥 표시 형식을 지정하고 싶은데 필드별로 변환하는 코드를 작성하는 것이 왜 이렇게 번거로울까? ? ? 걱정하지 마십시오. 위의 내용은 내장된 형식 변환기에 대한 데모일 뿐이므로 실제 프로젝트에서는 사용되지 않습니다. 다음은 주석 기반 형식 지정에 대한 소개입니다. 먼저 FormatModel.java를 다음 콘텐츠로 변경합니다.
package com.demo.web.models;import java.util.Date;import org.springframework.format.annotation.DateTimeFormat;import org.springframework.format.annotation.NumberFormat;import org.springframework.format.annotation.NumberFormat.Style;public class FormatModel{ @NumberFormat(style=Style.CURRENCY) private double money; @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date date; public double getMoney(){ return money; } public Date getDate(){ return date; } public void setMoney(double money){ this.money=money; } public void setDate(Date date){ this.date=date; } }
참고: 여기의 돈과 날짜는 더 이상 문자열 유형이 아니라 고유한 원래 유형입니다.
FormatController.java를 다음 콘텐츠로 변경합니다.
package com.demo.web.controllers;import java.util.Date;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.FormatModel; @Controller @RequestMapping(value = "/format")public class FormatController { @RequestMapping(value="/test", method = {RequestMethod.GET}) public String test(Model model) throws NoSuchFieldException, SecurityException{ if(!model.containsAttribute("contentModel")){ FormatModel formatModel=new FormatModel(); formatModel.setMoney(SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명5.678); formatModel.setDate(new Date()); model.addAttribute("contentModel", formatModel); } return "formattest"; } }
참고: 이 코드에는 할당만 있고 서식 지정 콘텐츠는 없습니다.
view formattest.jsp의 내용을 다음과 같이 변경합니다.
nbsp;html PUBLIC "-//WSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명C//DTD HTML SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.0SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명 Transitional//EN" "http://www.wSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명.org/TR/htmlSpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명/loose.dtd">rrree
참고: 여기에 참조를 추가해야 합니다@taglib prefix="spring"우리="http://www.php.cn/" %>, 및 spring:eval을 사용하여 표시할 값을 바인딩합니다.
테스트를 실행하고 브라우저 언어를 변경한 다음 페이지를 새로 고치면 첫 번째 방법의 스크린샷과 동일한 효과를 볼 수 있다는 것이 증명됩니다. 주석이 유효합니다.
표시된 콘텐츠의 서식이 종료됩니다.
참고: 이전에는 처음 SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명개 기사의 샘플 코드에 주의를 기울이지 않았습니다. 당시 업로드한 패키지와 프로젝트 파일이 왜 없는지 모르겠습니다. 결과적으로 다운로드 후 이클립스로 직접 임포트해서 실행도 안되고, 가상머신도 삭제했는데, 이런 샘플코드는 백업도 안된 상태인데, 코드파일이 아직 남아있으니, 새로운 동적 웹 프로젝트를 만들고 해당 구성 파일, 컨트롤러 및 뷰를 가져옵니다. 모든 분들께 불편을 끼쳐드려 죄송합니다.
위는 SpringMVC 학습 시리즈(7)에 표시되는 형식화된 그래픽과 텍스트에 대한 자세한 설명입니다. PHP 중국어 웹사이트(www.php.cn)로 이동하세요!