数値支援

NumberAssist によって、JSF 数値 文字列を含む入力フィールドの キーボード対話およびマウス対話を管理します。

これらのオブジェクトは、一般的な方法では使用できません (ユーザーはオブジェクトを作成して使用することはできません)。代わりに、これらのオブジェクトは入力支援の振る舞いによって作成されます。

数値文字列を含む入力フィールドに 数値支援が適用されたときに、 キー・ストローク、マウス対話、 およびクリップボード対話を処理する方法の概略を、 以下で説明します。

ぼかし/フォーカス対話

フィールドがフォーカスを受信する場合、 値が「入力フォーマット」に変換され、 正しい値になるように強制変換されます。 次に、プロンプト文字によって先行ゼロおよび末尾ゼロが置き換えられて、 その結果が表示された後に、 カーソルが小数点 (または暗黙小数点) の前に置かれます。

数値の「入力フォーマット」は、 その数値のフォーマットを基にして構成されます。 基本的に、パターン内の # または 0 以外の文字は すべてリテラルとして扱われ、# および 0 文字は すべて入力可能な位置としてマークされます。 3 桁区切り文字は、 必要なところが維持されます (すなわち、 先行ゼロの間からは除去されます)。 値は入力フォーマットに変換され、 有意になるように強制変換されます。 強制変換によって、値が制約内になるように 変換されるとともに、strict がコンバーター内で 2 に 設定されていなければ、 値が非ヌルにならないように変換されます (strict が 2 に 設定されている場合は、値はヌルのまま残ります)。

例えば、数字フォーマットが $ #,##0.00;($ #,##0.00) で、 値が -1 であるとすると、 プロンプト文字が * の場合、結果は ($ *,**1.**) になります。

フィールドがフォーカスを失うと、 プロンプト文字がフィールドから除去されて、 値は正しい値へ強制変換されます (つまり onblur 後は、 常に「正しい」値になります)。 この後、(元の) フォーマットを使用して、 その値は再フォーマットされます。 onBlur における「強制変換」は、onfocus での強制変換と同じです。 プロンプト文字を除去すると、 ゼロに置き換えられてしまうので (パディングが オンになっていて、 埋め込み文字と置き換えられる場合を除く)、 注意してください。

キー・ストローク対話

数字キーが押された場合 (つまり、keypress イベントが生成された場合)、 カーソルが小数点の左側にあるか右側にあるかによって、 その振る舞いの複雑さが異なります。 基本的に、小数点の左側にある場合は、 「挿入モード」で入力が処理されます。 つまり、カーソル位置に文字が挿入され、 左側にある数字は左にシフトします。 小数点の右側にある場合は、 カーソルは重ね打ちモードになり、文字を右方向に置き換えていきます。 ここでの目標は、 空のフィールド内に「123.45」のような値が (カーソルの初期位置が 小数点にある状態で) 入力できることと、正しい値が入力できることです。 小数点および 3 桁区切り文字などの リテラル文字を入力すると、 次に来るリテラル文字を「ジャンプ」できます。 値の左側で入力すると、 カーソルから最初の有効数字までの値がゼロ埋めされます。 すべてのケースにおいて、無効なキーが押されても「何も起こりません」。 数値が「オーバーフロー」した場合 (入力された桁数が多すぎた場合)、それ以上の文字が入力されても「何も起こりません」。

数値パターンだけでは、 パターン内のどの文字が 実際の「符号」であるかが分かりません (パターン内では、 値に符号が付いていることを示すために 先頭および末尾に付いている括弧など、 いろいろな文字が使用されている場合があります)。 そこで、数値内の任意の場所で プラスまたはマイナスのキーを押すことで、 数値の符号を切り替えることができます。 値の一部またはすべてが削除されると、 符号の特殊な処理が発生します。 今度の目標は、 空の数値作業内に -100.00 のような値を 正しく入力することです。

制御キーが押される (つまり、 キー・コードで指示されている制御キーによって、キーダウン・イベントが 生成される) と、NumberAssist はキーダウン・イベント上で 制御キーを処理します (これは Windows® で 標準です)。 制御キーが右矢印または左矢印の場合、 文字列内において入力が可能な位置へ、 カーソルが進むか、または戻ります。 Del キーが押されると、 カーソル位置の後ろにある文字 (複数の文字が選択されていれば、 その選択箇所) が削除され、カーソルが進みます。 バックスペース・キーが押されると、 カーソル位置の前にある文字が削除され、カーソルは戻ります。 小数点も含めて選択した箇所を削除する場合には、 その値を調整するための特殊な処理が必要となります。 この場合、カーソルは基本的に小数点の直前に置かれます。 タブまたは Enter が押されると、 アクションを処理する通常フォームが実行されます。 これ以外に、特殊な処理が行われる 制御キーはありません (例えば、HOME および END については、 特殊な処理は行われず、予想されるとおりに機能します)。

入力内容 (1 文字以上を追加/除去するもの) に応じて、 必要な場合に 3 桁区切り文字が 動的に追加/除去されるようにしてほしい、 というご要望がお客様から寄せられています。

マウス対話

ユーザーがフィールド内をクリックした (そのクリックによって、 何らかの選択が行われない) 場合、 ユーザーが入力可能な「次の」文字の前に、カーソルが置かれます。

クリップボード対話

切り取り/コピー/貼り付けにおける、 それぞれの相互作用は IE 内でのみ 処理され (Mozilla ではサポートしていません)、IE 内のみに 制限されたサポートが提供されます (相互作用を 管理するためのイベントの完全なセットは提供されますが、IE では クリップボードそのものに対するアクセスが制限されるため、 行える作業にも制約があります)。

コピー作業によって、 選択した箇所をクリップボードの <verbatim> タグにコピーします。 切り取り作業も、ほぼ同様の内容になりますが、 選択した箇所をクリアする (すべての入力位置を空白に設定する) 点が 異なります。 貼り付け作業の場合、 クリップボード上の値が数字文字列であると見なされれば、 「入力できる」文字 (非リテラル文字) のみが貼り付けられ、 それ以外の場合は文字列全体が貼り付けられます。 この貼り付け作業は、「入力」位置に対してのみ 文字を適用します (リテラルをスキップします)。 任意の文字の入力に関する妥当性検査が失敗した場合、 貼り付け作業全体がキャンセルされます。 検査が成功した場合は、 貼り付けられた文字の最後にカーソルが置かれます (ただし、 ブラウザーによって カーソル位置が移動させられてしまう場合もあります)。

制限


フィードバック