JSF テキスト入力コントロールは、JSF 先行入力フィーチャーを使用して、ユーザーが入力コントロールに入力する可能性があるものを予測することができます。 先行入力を使用した入力コントロールでは、ユーザーがそのコントロールに入力した最初の数文字を基にした選択肢のリストが表示されます。 続いて、ユーザーは、これらのオプションから 1 つを選択するか、別のテキストの入力を続行することができます。

ユーザーが入力を続行している間、先行入力フィーチャーは、ユーザーがフィールドに入力した新規の値に一致するように、オプションをフィルタリングします。

先行入力の使用に関するステップは、オプションのリストを取得するためにどの方法を使用するかによって異なります。
先行入力関数のオプションを指定するための簡単な方法は、データ・テーブルまたは有効値のリストのいずれかで、フィールドにバインドされた変数をオプションのリストに関連付けることです。
state STRING;
state STRING {typeahead = YES};
state STRING {typeahead = YES,
validValues = ["AK","AL","AR","AZ",
"NC","NY","NH","NJ",
"NM","NE","NV","ND"]};
この例では、有効な値は、文字「A」および「N」で始まるアメリカの州名の省略形です。
ユーザーが文字「A」を入力コントロールに入力すると、先行入力は、「A」で始まる省略形を提示し、文字「N」の場合も同様に「N」で始まる省略形を提示します。
有効な値のリストによる先行入力を使用するときに、有効な値に範囲を含めることはできません。
state string {typeahead = YES,
ValidatorDataTable = data.stateAbbrevs};
一致するデータ・テーブルは、以下の例のように表示されます。上記の validValues のサンプルの場合と同様の情報を示します。
package data;
dataTable stateAbbrevs type MatchValidTable {shared = no, resident = no}
3 abbrev char(2);
{contents = [
["AK"],["AL"],["AR"],["AZ"],
["NC"],["NY"],["NH"],["NJ"],
["NM"],["NE"],["NV"],["ND"]
]}
end
先行入力で使用するデータ・テーブルは、MatchValidTable 型である必要があります。先行入力で 提示されるオプションをより細かく制御するために、実行時にオプションを動的に決定する関数を作成できます。
// 以下の任意の州名を戻す
//キーは完全な州名のサブストリング。
function getStateChoices( key string in ) returns( string[] )
results string[0];
key_upper string = strlib.upperCase( key );
value string;
// 同じ文字で始まる値を検索する。
for ( i int from 1 to syslib.size( states ) )
// データ・テーブルの各値とキーとを比較する。
value = strlib.upperCase( states.fullname[i] );
if ( strlib.indexOf( value, key_upper ) == 1 )
// この値は、キーと同じ文字で始まる。
// それをオプションのリストに追加する。
results.appendElement( states.fullname[i] );
end
end
return( results );
end
この関数は、ユーザーが入力フィールドに入力したテキスト (変数
key によって表される) と、データ・テーブルの値を比較します。
コード if ( strlib.indexOf( value, key_upper) == 1 ) は、
データ・テーブルの値が、ユーザーが入力した文字で始まるかどうかを判別し、該当する場合、code results.appendElement(
states.fullname[i] ); は、データ・テーブルの値を、先行入力のオプションの配列に追加します。
この関数は、以下の例にあるようにデータ・テーブルの情報を使用しますが、関数は、データベースやレコード変数など、任意のソースからデータを検索することができます。
package data;
dataTable states type MatchValidTable
{shared = no, resident = no}
3 fullname char(20);
{contents = [
["ALASKA"],
["ALABAMA"],
["ARKANSAS"],
["ARIZONA"],
["NORTH CAROLINA"],
["NORTH DAKOTA"],
["NEBRASKA"],
["NEW HAMPSHIRE"],
["NEW JERSEY"],
["NEW MEXICO"],
["NEVADA"],
["NEW YORK"]
]}
end
state STRING;
state STRING {typeaheadFunction = getStateChoices};
ページでの先行入力機能の外観と動作をカスタマイズできます。 これらのオプションを設定するには、次のステップを実行します。
