Sie können EGL-Code zum Aufrufen von Java™-Funktionen verwenden, die von JSF-Steuerelementen (JavaServer Faces) erkannt werden. Auf diese Weise können Sie das Aussehen und Verhalten dieser Steuerelemente von einem JSF-Handler aus ändern. Das folgende Beispiel enthält EGL-Code zum Zugreifen auf ein JSF-Steuerelement:
package jsfhandlers;
import com.ibm.egl.jsf.*;
handler myPage type JSFHandler
{view = "myPage.jsp",
viewRootVar = myViewRoot}
myViewRoot UIViewRoot;
myInputVar string = "Hello";
function changeColor()
myInputField HtmlInputText;
myInputField = myViewRoot.findComponent("form1:text1");
myInputField.setStyle("color : red");
end
end
In diesem Beispiel wird ein Eingabesteuerelement auf dem JSP mit dem Namen
text1 vorausgesetzt, das an die Variable
myInputVar gebunden ist, und eine Befehlsschaltfläche auf dem JSP, die an die Funktion
changeColor gebunden ist.
Gehen Sie wie folgt vor, um von einem JSF-Handler aus auf ein JSF-Steuerelement zuzugreifen:
- Stellen Sie sicher, dass Ihr EGL-Webprojekt über Unterstützung für die JSF-Komponentenschnittstelle verfügt. Lesen Sie dazu das Kapitel Unterstützung für eine JSF-Komponentenschnittstelle zu einem EGL-Webprojekt hinzufügen.
- Erstellen Sie eine Webseite und fügen Sie ihr JSF-Steuerelemente hinzu.
- Optional können Sie das ID-Attribut der JSF-Steuerelemente ändern, sodass sie einfacher ermittelt werden können. Sie können das ID-Attribut ändern, indem Sie das Steuerelement auswählen und ein sinnvolles mnemonisches Zeichen eingeben, das innerhalb der Seite im Feld 'ID' in der Eigenschaftsansicht eindeutig ist.
- Fügen Sie im JSF-Handler der Seite den folgenden Code hinzu. Wenn Sie die Faces-JSP-Datei erstellen, nachdem Sie die Unterstützung für die JSF-Komponentenschnittstelle zum Projekt hinzugefügt haben, wird dieser Code automatisch zur Datei des JSF-Handlers hinzugefügt.
- Fügen Sie die folgende Importanweisung hinzu:
import com.ibm.egl.jsf.*
Die Pakete, die durch diese Anweisung importiert werden, enthalten eine Gruppe von ExternalType-Abschnitten, durch die der Zugriff auf Java-Code in den JSF-Steuerelementen bereitgestellt wird. Diese Abschnitte müssen nicht bearbeitet werden.
- Deklarieren Sie innerhalb des JSF-Handlers der Seite eine Variable des Typs 'UIViewRoot', wie im folgenden Beispiel gezeigt:
myViewRoot UIViewRoot;
- Geben Sie den Namen der Variable des Typs 'UIViewRoot' in der JSF-Handlereigenschaft 'viewRootVar' an:
handler myPage type JSFHandler
{view = "myPage.jsp",
viewRootVar = myViewRoot}
- Drücken Sie in einer leeren Zeile innerhalb einer Funktion im JSF-Handler Strg+Umschalt+Z.
Das Fenster 'EGL-Quellenassistent' wird geöffnet und die JSF-Steuerelemente werden auf der Seite angezeigt.
- Wählen Sie im Fenster 'EGL-Quellenassistent' das JSF-Steuerelement aus, auf das Sie zugreifen möchten. Sie können die IDs oder Steuertypen verwenden, um das gewünschte Steuerelement zu finden, oder Sie können die Maus über die Steuerelemente bewegen, um ihre Attribute anzuzeigen.
- Klicken Sie auf 'OK'.
Im EGL-Quellenassistent werden zwei Zeilen EGL-Code zum JSF-Handler hinzugefügt:
- Verwenden Sie die Variable zum Ändern des JSF-Steuerelements. Beim folgenden Code wird zum Beispiel die Funktion setStyle zum Ändern der Schriftfarbe in einem Eingabesteuerelement in rot verwendet:
myInputField.setStyle("color : red");
Wenn dieser Code ausgeführt wird, wird die Darstellung des Eingabesteuerelements geändert. In diesem Beispiel sieht der im Browser angezeigte HTML-Code folgendermaßen aus:
<input id="form1:text1" type="text" name="form1:text1" style="color : red" />
Die zugehörigen Themen in diesem Abschnitt enthalten weitere Beispiel von Operationen, die auf diese Weise für JSF-Steuerelemente ausgeführt werden können. Eine vollständige Liste von Operationen, die für ein bestimmtes Steuerelement aufgerufen werden können, finden Sie in den Funktionen der ExternalType-Abschnitte im Paket com.ibm.egl.jsf.
Im Folgenden finden Sie Hinweise zum Zugreifen auf JSF-Steuerelemente mithilfe von EGL-Code:
- Für eine vollständige Liste von JSF-Funktionen, auf die in EGL zugegriffen werden kann, öffnen Sie die Datei 'FacesHtmlComponent.egl' im Paket 'com.ibm.egl.jsf'.
Diese Datei wird zu Ihrem Projekt hinzugefügt, wenn Sie die Unterstützung für die JSF-Komponentenschnittstelle hinzufügen. Die Funktionen werden in den Kommentaren zu dieser Datei kurz erklärt. Nähere Informationen finden Sie in der Dokumentation zu den Faces-Steuerelementen.
- Wenn ein Parameter an eine dieser Funktionen übergeben wird, stellen Sie sicher, dass der richtige Datentyp übergeben wird. Da viele der an diese Funktionen übergebenen Parameter in HTML-Attribute eingefügt werden, müssen sie als EGL-Zeichenfolgevariablen übergeben werden, auch wenn mit dem Namen der Funktion andeutet wird, dass es sich beim Parameter um einen numerischen oder booleschen Wert handelt.
Mit der Funktion setWidth zum Beispiel wird die Breite eines Steuerelements in Pixeln oder ein Prozentsatz dessen Originalgröße angegeben, wenn das Prozentzeichen (%) angehängt ist. Da es sich bei diesem Parameter um ein Maß handelt, scheint ein numerischer Datentyp als Parameter erforderlich zu sein. Diese Funktion muss jedoch eine Zeichenfolge empfangen. Um die Breite eines Steuerelements auf 300 Pixel festzulegen, muss eine Zeichenkettenvariable mit dem Wert '300' übergeben werden.
- Da durch viele der Funktionen Informationen von HTML-Attributen festgelegt oder zurückgegeben werden, müssen Sie die HTML-Attribute kennen, die mit den Funktionen verbunden sind, die Sie verwenden. Sie können ein HTML-Attribut ändern, das erforderlich ist, damit die Seite ordnungsgemäß funktioniert. Wenn Sie zum Beispiel die Darstellungsklasse eines Steuerelements, wie in Die Darstellungsklasse eines JSF-Steuerelements ändern beschrieben, ändern, muss diese neue Darstellungsklasse des Steuerelements für die Seite in einer CSS-Datei oder einem Stiltag verfügbar sein, da das Steuerelement sonst möglicherweise nicht ordnungsgemäß angezeigt werden kann. Stellen Sie sicher, dass alle an den Webseiten vorgenommenen Änderungen getestet werden. In den Kommentaren in der Datei 'FacesHtmlComponent.egl' wird auf die Funktionen hingewiesen, durch die HTML-Attribute direkt geändert werden.
- In den meisten Fällen sind die an den JSF-Steuerelementen vorgenommenen Änderungen nicht kumulativ. Wenn Sie zum Beispiel die Schriftfarbe eines Steuerelements mit dem Code myComponent.setStyle("color: red"); in rot ändern und die Schriftstärke desselben Steuerelements mit dem Code myComponent.setStyle("font-weight: bold"); in fett ändern, wird der Text zwar fett, aber nicht rot, da die Änderung der Schriftfarbe von der Änderung der Schriftstärke überschrieben wird.
Um mehrere Änderungen zu einem JSF-Steuerelement hinzuzufügen, rufen Sie den aktuellen Status des Steuerelements ab und hängen Sie die neuen Daten an. Beachten Sie dabei die Verwendung von Begrenzern in der Änderungsliste.
Verwenden Sie zum Beispiel den folgenden Code, um den Text eines Steuerelements in fett und rot zu ändern, ohne vorherige Änderungen an der Darstellung des Steuerelements zu überschreiben:
myStyleString string;
myStyleString = myComponent.getStyle() + "; color: red; font-weight: bold";
myComponent.setStyle(myStyleString);
- In den Funktionen 'onConstructionFunction' und 'onPreRenderFunction' im Handler können Sie nicht auf diese Weise auf JSF-Steuerelemente zugreifen. Mit der in der Eigenschaft 'onPostRenderFunction' festgelegten Funktion kann auf den JSF-Komponentenbaum zugegriffen werden. Da diese Funktion jedoch aufgerufen wird, nachdem die Seite zurückgegeben und an den Browser gesendet wurde, sind die Änderungen in der Seite erst dann für den Benutzer sichtbar, wenn die Seite aktualisiert wird.
Es können viele unterschiedliche Änderungen an JSF-Steuerelementen vorgenommen werden.
Beispiele finden Sie in den verwandten Tasks.