ホームページ  >  記事  >  Java  >  SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説

SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説

黄舟
黄舟オリジナル
2017-03-03 11:01:451856ブラウズ

連載(6)では、提出されたデータが正しいかどうかを検証する方法を紹介しました。検証に合格したデータは、当社で保存されます。保存したデータは今後の表示に使用されます。これが保存された値です。では、表示するときに必要に応じて表示するにはどうすればよいでしょうか。 (例: 特定の数の SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説0 進数を保持する、日付を指定された形式で保持するなど)。この記事の内容はこちら→「フォーマットされた表示」です。

Spring SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説 から開始します。SPI は Converter SPI のカプセル化であり、その内部変換は引き続き Converter SPI によって完了します。

以下は、リクエストとモデルオブジェクト間の単純な変換プロセスです:

SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説

Spring は、オブジェクトの解析と書式設定を完了するために FormattingConversionService と DefaultFormattingConversionService を提供します。 Spring に組み込まれているいくつかのフォーマッタ SPI は次のとおりです。

Name Function
NumberFormatter は Number と String の間の解析と書式設定を実装します
CurrencyFormatter は解析を実装します数値との間の書式設定文字列の解析と書式設定 (通貨記号付き)
PercentFormatter Number と String の間の解析と書式設定 (パーセント記号付き)
DateFormatter Date と String の間の解析と書式設定を実装します
Numberフォーマットアノテーションフォーマッターファクトリー @NumberFormat アノテーションは、Number と String の間の解析と書式設定を実装します。変換する形式を示すスタイル (Style.Number/Style.Currency/Style.Percent など) を指定することもできます。 pattern="#.##" (小数点以下 SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説 桁を保持))、パターンで指定された形式が Style
JodaDateTimeFormatAnnotationFormatterFactory @DateTimeFormat アノテーションで指定された形式を上書きして、日付型と String の間の関係を実装します。ここでの日付タイプの解析と書式設定には、Date、Calendar、Long、Joda の日付タイプが含まれます。 Joda-Time パッケージをプロジェクトに追加する必要があります

デモを始めましょう:

まず、前のプロジェクトに 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 を追加します。 .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;
    }
        
}


テストを実行します:


優先ブラウザ言語を変更します:

SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説

ページを更新します:

SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説

今回は DefaultForma を使用します。 ttingConversionServiceデモ用に、FormatConversionService troller を使用します。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) 整形された表示グラフィックとテキストの詳細解説

今回は Locale がありません。 locale=LocaleContextHolder.getLocale(); テストを再度実行し、言語を変更して更新すると、確認できます。最初のメソッドのスクリーンショットと同じ効果で、DefaultFormattingConversionService を示しています。ブラウザーによって要求された情報に基づいて、対応する形式が自動的に返されます。

SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説. ああ、表示をフォーマットしたいだけなのに、なぜフィールドごとに変換するコードを書く必要があるのか​​と思う人もいると思います。 ? ?心配しないでください。上記は組み込みの形式コンバーターの単なるデモです。実際のプロジェクトでは使用されません。ここでは、注釈ベースの書式設定について説明します。まず、FormatModel.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";
    }
    
}

注: ここのお金と日付は String 型ではなくなり、独自の元の型になります。

FormatController.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;
    }
        
}

注: このコードには代入のみがあり、書式設定の内容はありません。

ビュー formattest.jsp の内容を次のように変更します:

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";
    }
    
}
nbsp;html PUBLIC "-//WSpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説C//DTD HTML SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説.0SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説 Transitional//EN" "http://www.wSpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説.org/TR/htmlSpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説/loose.dtd">

注: ここに参照を追加する必要があります@taglib prefix="spring"uri="http://www.php. cn/ " %>, を使用し、spring:eval を使用して表示する値をバインドします。

テストを実行し、ブラウザーの言語を変更して、ページを更新しても、最初の方法のスクリーンショットと同じ効果が確認でき、注釈が有効であることがわかります。

これで表示内容の整形は完了です。

注: 以前の最初の SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説SpringMVC学習シリーズ(7) 整形された表示グラフィックとテキストの詳細解説 個の記事のサンプル コードに注意を払わなかったので、その時点でアップロードされたパッケージに .project プロジェクト ファイルが含まれていなかった理由はわかりません。 , Eclipse を直接インポートして実行できず、仮想マシンが削除されました。これらのサンプル コードのバックアップはありませんが、コード ファイルはまだ存在するため、新しい動的 Web プロジェクトを作成して、対応するものをインポートできます。設定ファイル、コントローラー、ビューについては、皆様にご迷惑をおかけして申し訳ございません。

上記は、SpringMVC 学習シリーズ (7) の書式設定されたグラフィックとテキストの詳細な説明です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。