/
データフォーマッタ
データフォーマッタ
Overview
Platform 4.2+ が必要
フォーマッタ
フォー マッタは、データソースから取得したデータを表示用に変換します。たとえば、フォーマッタは数値オブジェクト 1123.8 を、ユーザーインターフェイスによる表示用に文字列 "$1,123.80" に変換できます。各バインディングには、データが経由するフォーマッタのチェーンがあります。
フォーマッタの宣言は、データ ソースの宣言に似ています。次の例に、フォーマッタを示します。
<formatter id=”customers” class=”com.nexaweb.plugin.data.formatter.MessageFormatter” format="There are {0} customers in the database"/>
<formatter id=”customers” class=”com.nexaweb.plugin.data.formatter.MessageFormatter” format="There are {0} customers in the database"/>
次の表に、独自のフォーマッタを定義する方法を示します。
フォーマッタの定義メソッド | 説明 |
用意されているタグ | Nexaweb には、定義済みの formatter タグが付属しています。 |
カスタム タグ | 表示する UI 用の適切なフォーマットにデータを変換するタグを宣言するには、Nexaweb のプラグイン アーキテクチャを使用します。 |
独自のフォーマッタを定義する方法の詳細については、「フォーマッタの作成」を参照してください。
また、Nexaweb には UI での表示用にデータを変換するための次のフォーマッタタグが用意されています。
- messageFormatter
- decimalFormatter
- dateFormatter
- currencyFormatter
- stringToDateFormatter
- formatterChain
定義済みフォーマッタの詳細については、「用意されているタグ」を参照してください。
メモ: Nexaweb は、すべてのニーズを満たす検証を提供するわけではありません。たとえば、Nexaweb には州の略語、郵便番号、電話番号などのためのフォーマッタは用意されていません。ただし、Nexaweb が提供する formatter タグを使用すれば、これらの機能を実現するフォーマッタを簡単に作成できます。
Supplied Formatter Tags
Platform 4.2+が必要
用意されているフォーマッタ タグ
ここでは、Nexaweb で用意されているフォーマッタタグについて説明します。
フォーマッタ タグ
com.nexaweb.plugin.data.formatter API を使用して作成したフォーマッタクラスを宣言するには、フォーマッタタグを使用します。
フォーマッタタグには次の属性が含まれています。
属性 | 説明 |
ID | システム全体で一意な値を使用し、このフォーマッタを一意に識別します。 |
class | フォーマッタ インターフェイスを実装する Java クラスの名前を識別します。 |
フォーマッタ タグを使用して独自のフォーマッタ クラスを宣言することに加えて、異なる属性を使用する独自のタグを作成することもできます。
messageFormatter タグ
文字列メッセージで使用するパターンおよびフォーマットを指定するには、java.text.message フォーマットに基づく messageFormatter タグを使用します。
messageFormatterタグには次の属性が含まれています。
属性 | 説明 | 必須/省略可能 |
id | システム全体で一意な値を使用し、この messageFormatter を一意に識別します。 | 必須 |
format | 有効な java.text.MessageFormat パターン文字列を定義します。 | 必須 |
locale | "en_US" などのロケール文字列です。 | 省略可能 |
出力
messageFormatterタグは常に java.lang.String オブジェクトを出力します。これは、このフォーマッタのクラスが java.text.MessageFormat クラスを使用するからです。
入力
次の表に、各フォーマット文字列で許可される入力の型を示します (このクラスでは java.text.MessageFormat クラスを使用するため、指定したフォーマット文字列によって許容される入力が決まります)。
フォーマット文字列 | 許容される入力 |
"There are {0} customers" |
|
"There are {0,number} customers" |
|
"There are {1} customers" |
|
"There are {0, number} customers with {1} cars" |
|
メ モ: 1.4 以降の JVM では、Nexaweb は文字列を数値に解析することが可能な限り、数値が求められるすべての箇所で、getFormatsByArgumentIndex() メソッドを使用して文字列オブジェクトを受け取ります。また、Newxaweb は Long.parseLong(String) またはデフォルトの DateTime インスタンスで文字列を解析することが可能な限り、日付が求められるすべての箇所で、文字列を受け取ります。
JVM 1.3 以前の環境では、Nexaweb は引数を求められる型に変換できるとは限りません。これは MessageFormat API で十分な情報が提供されないからです。Nexaweb は、元の引数でフォーマット設定が失敗した場合、引数の変換を試みます。ただし、これがうまくいくのは一部のケース (getFormats() と getFormatsByArgumentIndex() が同じフォーマット配列を返す場合) に限られます。たとえば、"My string with a date: {0,date}, a number {1,number} and some string {2}"というフォーマット文字列の場合、getFormats() と getFormatsByArgumentIndex() は同じ結果を返します。
しかし、"My string with some string {2}, a number {1,number} and a date: {0,date}" というフォーマット文字列の場合、これらのメソッドは同じ値を返しません。
いずれのフォーマット文字列でも、getFormatsByArgumentIndex() は同じフォーマットの配列 [DateFormat,NumberFormat,null] (null はフォーマットなし、または String のみを表します) を返します。しかし、getFormats() は最初の例では [DateFormat,NumberFormat,null]、2 番目の例では [null, NumberFormat,DateFormat] をそれぞれ返します。したがって、JVM 1.3 以前の環境で最良の結果を得るには、MessageFormatter に適切な引数の型を渡します。
currencyFormatter タグ
数値から通貨文字列を作成するには、java.text.NumberFormat に基づく currentyFormatter タグを使用します。
currentyFormatterタグには次の属性が含まれています。
属性 | 説明 | 必須/省略可能 |
id | システム全体で一意な値を使用し、この currencyFormatter を一意に識別します。 | 必須 |
locale | "en_US" などのロケール文字列です。 | 省略可能 |
decimalFormatter タグ
10 進数のフォーマット文字列を作成するには、java.text.DecimalFormat に基づくdecimalFormatterタグを使用します。
decimalFormatterタグには次の属性が含まれます。
属性 | 説明 | 必須/省略可能 |
id | システム全体で一意な値を使用し、この messageFormatter を一意に識別します。 | 必須 |
format | "##.0#%" などの 10 進数フォーマット パターンです。 | 必須 |
locale | "en_US" などのロケール文字列です。 | 省略可能 |
dateFormatter タグ
文字列から日付を作成するには、java.text.DateFormat に基づくdateFormatterタグを使用します。
dateFormatterタグには次の属性が含まれます。
属性 | 説明 | 必須/省略可能 |
id | システム全体で一意な値を使用し、この dateFormatter を一意に識別します。 | 必須 |
locale | "en_US" などのロケール文字列です。 | 省略可能 |
format | このフォーマッタへの入力が Date 型または Long 型の場合、dateFormatter はこのパターンを使用して、フォーマット設定を実行する SimpleDateFormat インスタンスを構築します。 メモ: format を指定した場合、dateFormatInstance、dateStyle、timeStyleの各属性は無視されます。 すべてのロケールが SimpleDateFormat をサポートするわけではありません。したがって完全な汎用性を実現するには、formatではなく、無視されると指摘した属性を使用します。 | 省略可能 |
stringToDateFormat | こ のフォーマッタへの入力が String 型の場合、埋め込みの StringToDateFormatter はこのパターンを使用して String を Date に変換します。一般に、DateFormatter への引数が String の場合、次の手順が実行されます。
| 省略可能 |
stringToDateLocale | 埋め込みの StringToDateFormatter が文字列引数を解析するために使用するロケールです。 | 省略可能 |
dateFormatInstance | 日付のフォーマットを、日付のみ、時間のみ、または日付と時間の両方として指定します。 値: date、time、または date,time デフォルト: date メモ: format属性を使用した場合、dateFormatInstanceは無視されます。詳細については、format 属性の説明を参照してください。 | 省略可能 |
dateStyle | dateFormatInstance 属性で指定する日付フォーマットの一部として日付を含める場合は、この属性を使用して、フォーマット設定される日付文字列の長さを指定します。 値: short、medium、long、または full | |
timeStyle | dateFormatInstance属性で指定したdata formatにtimeを含む場合、この属性を使用しformatted timeの長さを指定します。 値: short、medium、long、または full デフォルト: medium メモ:format属性を使用した場合、この属性は無視されます。詳細については、format 属性の説明を参照して下さい。 | |
Lenient | DateFormatterへの入力が文字列の場合、StringToDateFormatterがlenient parsingを行うかどうか指定する 値: true | false デフォルト:true | |
timeZone | この Dateformatterへの入力をパースおよび/またはフォーマットするために使用する time zone 文字列を指定する 値:time zone 文字列、例えば PST この属性を使用しない場合、TimeZone.getDefault() がデフォルト TimeZone を提供する。 |
stringToDateFormatter Tag
Nexaweb Java アプリケーションにのみ利用可能
stringToDateFormatter タグを使用し、テキストスタイルフォーマットなしに文字列からdateを作成します。
stringToDateFormatter タグは次の属性を含みます。
属性 | 説明 | 必須/省略可能 |
id | システム全体で一意な値を使用し、このdateFormatter を一意に識別します。 | 必須 |
format | format() method の文字列引数をDateに変換するために使用する特別なパターン。 この属性を指定するかどうかに拘らず、NexawebはStringをDateに変換するために、次のステップに従います。:
これら3つのデフォルトformatterのlocaleはLocaleになる。USとtimezoneはGMT。 | 省略可能 |
locale | "en_US"などのロケール文字列です。 | Optional |
lenient | DateFormatterへの入力が文字列の場合、lenient属性はStringToDateFormatter により実施されたparseがlanientかどうかを指定します。Lanientとは? 値: true | false デフォルト: true | Optional |
timeZone | このDateformatterへの入力をParsingおよび/またはformattingするために使用するtime zone文字列を指定する 値:time zone文字列、例えばPST この属性を使用しない場合、TimeZone.getDefault()がデフォルトTimeZoneを提供する。 | 省略可能 |
Creating a Formatter
データをフォーマット設定するモジュールの定義
Nexaweb では、データ バインディング フレームワークの一部として、データを UI での表示用に変換する独自の機能を実装できます。たとえば、データ ソースから返されたカスタム オブジェクトを適切な文字列に変換する独自のフォーマッタを実装することができます。フォーマッタの機能を実装するには、API セクションで定義されている必須インターフェイス (com.nexaweb.plugin.data.formatter.Formatter) を実装する必要があります。
Nexaweb には、定義済みの formatter タグが付属しています。このタグを使用し、実装するインターフェイスを利用することができます。それには、実装のクラスを formatter タグの class 属性として指定します。
フォーマッタタグ
最も基本的なフォーマッタ タグである formatter は、フォーマッタの実装クラスと ID を使用してフォーマッタを定義します。
属性 | 説明 | 必須/省略可能 |
id | フォーマッタを一意に識別します。開発者は、システム全体で一意な値を指定するよう注意する必要があります。 | 必須 |
class | フォーマッタの実装を識別します。 | 必須 |
さらに、開発者は独自のフォーマッタ タグ定義を作成することもできます。