>  기사  >  Java  >  SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-03 11:01:451856검색

시리즈 (6)에서는 제출된 데이터의 정확성을 확인하는 방법을 소개했습니다. 데이터가 확인을 통과하면 해당 데이터가 저장됩니다. 저장된 데이터는 향후 표시에 사용되며, 이는 저장 값입니다. 그러면 표시할 때 필요에 따라 표시하는 방법은 무엇입니까? (예: 특정 소수 자릿수, 지정된 형식의 날짜 등을 유지합니다.) 이것이 바로 이 기사의 내용입니다. —>형식화된 디스플레이.

Spring SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명부터. 변환을 위해 Formatter SPI는 Converter SPI의 캡슐화이며 내부 변환은 여전히 ​​Converter SPI에 의해 완료됩니다.

다음은 요청과 모델 객체 간의 간단한 변환 프로세스입니다.

SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

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) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

브라우저 기본 언어 변경:

SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

페이지 새로 고침:

SpringMVC 학습 시리즈 (7) 그래픽 및 텍스트의 형식화된 표시에 대한 자세한 설명

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)로 이동하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.