Von JSF-Eingabesteuerelementen (JSF - JavaServerFaces) für Text kann die JSF-Funktion Eingabepuffer (Type-ahead) verwendet werden, um im Voraus zu erkennen, welchen Text ein Benutzer in das Eingabesteuerelement eingeben wird. Eingabesteuerelemente mit Eingabepuffer bieten eine Liste mit Optionen, die auf den ersten Zeichen basiert, die der Benutzer in das Steuerelement eingibt. Der Benutzer kann daraufhin eine dieser Optionen verwenden oder mit der Eingabe von anderem Text fortfahren:

Während der Benutzer mit der Eingabe fortfährt, filtert die Eingabepufferfunktion die Optionen, um die neuen Werte abzugleichen, die der Benutzer in das Feld eingegeben hat:

Die Schritte für die Verwendung des Eingabepuffers (Type-ahead) hängen davon ab, welche von diesen Methoden Sie verwenden, um die Liste mit den Optionen abzurufen.
Der einfachste Weg, um Optionen für die Eingabepufferfunktion bereitzustellen, besteht darin, die an das Feld gebundene Variable einer Liste mit Optionen zuzuordnen, entweder in einer Datentabelle oder in einer Liste mit gültigen Werten.
state STRING;
state STRING {typeahead = YES};
state STRING {typeahead = YES,
validValues = ["AK","AL","AR","AZ",
"NC","NY","NH","NJ",
"NM","NE","NV","ND"]};
In diesem Beispiel sind die Abkürzungen für US-Bundesstaaten, deren Bezeichnung mit den Buchstaben 'A' und 'N' beginnen, gültige Werte.
Wenn der Benutzer den Buchstaben 'A' in das Eingabesteuerelement eingibt, stellt der Eingabepuffer die mit 'A' beginnenden Abkürzungen und bei 'N' entsprechend die mit 'N' beginnenden Abkürzungen bereit.Bei der Verwendung des Eingabepuffers zusammen mit einer Liste mit gültigen Werten, dürfen die gültigen Werte keinen Bereich enthalten.
state string {typeahead = YES,
ValidatorDataTable = data.stateAbbrevs};
Die passende Datentabelle kann wie im folgenden Beispiel aussehen und dieselben Informationen bereitstellen, wie im Beispiel validValues oben.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
Datentabellen, die mit dem Eingabepuffer verwendet werden, müssen den Typ 'MatchValidTable' aufweisen.Für mehr Kontrolle über die mit dem Eingabepuffer bereitgestellten Optionen können Sie eine Funktion erstellen, die die Optionen während der Ausführungszeit dynamisch festlegt.
// Alle Namen von Bundesstaaten zurückgeben, in denen
//der Schlüssel (key) eine Teilzeichenfolge des vollständigen Staatennamens ist.
function getStateChoices( key string in ) returns( string[] )
results string[0];
key_upper string = strlib.upperCase( key );
value string;
// Nach Werten mit denselben Anfangszeichen suchen.
for ( i int from 1 to syslib.size( states ) )
// Jeden Wert in der Datentabelle mit dem Schlüssel vergleichen.
value = strlib.upperCase( states.fullname[i] );
if ( strlib.indexOf( value, key_upper ) == 1 )
// Dieser Wert beginnt mit denselben Zeichen wie der Schlüssel.
// Diesen Wert zur Liste mit den Optionen hinzufügen.
results.appendElement( states.fullname[i] );
end
end
return( results );
end
Diese Funktion vergleicht den vom Benutzer in das Eingabesteuerelement eingegebenen Text, der durch die Variable key dargestellt wird, mit den Werten in der Datentabelle. Mithilfe des Codes if ( strlib.indexOf( value,
key_upper
) == 1 ) wird ermittelt, ob der Wert in der Datentabelle mit den Zeichen beginnt, die der Benutzer eingegeben hat. Ist dies der Fall, wird mithilfe von code results.appendElement(
states.fullname[i] ); der Wert aus der Datentabelle der Feldgruppe von Optionen für den Eingabepuffer hinzugefügt. Obwohl diese Funktion Informationen aus einer Datentabelle (wie im folgenden Beispiel) verwendet, könnte die Funktion Daten aus einer beliebigen Quelle, wie beispielsweise einer Datenbank oder einer Datensatzvariable, abrufen.
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};
Sie können das Aussehen und das Verhalten der Eingabepufferfunktionalität auf der Seite anpassen. Gehen Sie zum Festlegen dieser Optionen wie folgt vor:
