Zugriff auf Komponentenbaumstruktur

EGL ermöglicht es Ihnen, Aspekte von JSF-Steuerelementen, die in einem Web-Browser angezeigt werden, dynamisch zu aktualisieren. Sie können beispielsweise die Farbe eines Textfelds ändern, wenn der Benutzer Informationen eingibt, die in dem Feld nicht gültig sind.

Um auf eine JSF-Komponente auf einer Faces-JSP-Seite zuzureifen, definieren Sie zunächst eine EGL-Variable mit dem Typ dieser Komponente. EGL stellt 'ExternalType'-Abschnitte in dem Paket 'com.ibm.egl.jsf' bereit, um die JSF-Komponenten darzustellen. Anschließend erstellen Sie eine Variable, um die vollständige Hierarchie von JSF-Komponenten auf der Seite, auch als Komponentenbaumstruktur bezeichnet, darzustellen. Dann weisen Sie die Variable, die die JSF-Komponente darstellt, mithilfe der Funktion findComponent() der Komponentenbaumstruktur der tatsächlichen JSF-Komponente zu.

Verwenden Sie die folgende Syntax, um eine Variable einem JSF-Steuerelement zuzuweisen:
   controlVar = viewRoot.findComponent(controlName);
controlVar
Eine 'ExternalType'-Variable, die die JSF-Komponente darstellt.
viewRoot
Eine Variable vom Typ 'UIViewRoot', die den JSF-Komponentenbaumstruktur auf der Seite darstellt. Diese Variable muss als Wert der JSF-Handlereigenschaft viewRootVar festgelegt werden.
controlName
Eine Zeichenfolgevariable oder ein Literal zur Angabe des Steuerelements. In den meisten Fällen geben Sie eine Reihe von JSF-Steuerelement-IDs an, wobei Sie mit der ID des obersten Formulars in der Komponentenbaumstruktur beginnen und fortfahren bis zur ID des spezifischen Steuerelements. Die einzelnen IDs sind durch einen Doppelpunkt (:) voneinander getrennt. Die folgende Zeichenfolge verweist auf ein Textfeld mit dem Namen text1 in einem obersten Formular mit dem Namen form1:
  "form1:text1"

Nachdem Sie die Variable dem JSF-Steuerelement zugeordnet haben, können Sie Funktionen dieser Variable verwenden, um Änderungen an der JSF-Komponente vorzunehmen. Verschiedene Typen von JSF-Steuerelementen akzeptieren verschiedene Funktionen. Die Funktionen, die jeder Komponententyp akzeptieren kann, sind im entsprechenden 'ExternalType'-Abschnitt der Komponenten enthalten.

Sie können auf JSF-Komponenten über diese 'ExternalType'-Abschnitte in allen Funktionen in einem JSF-Handler zugreifen, mit Ausnahme der Funktionen, die in den Eigenschaften onConstructionFunction und onPreRenderFunction angegeben sind, oder allen Funktionen, die von diesen Funktionen aufgerufen werden. Wenn diese Funktionen ausgeführt werden, wurde die Komponentenbaumstruktur noch nicht wiedergegeben, deshalb schlägt jeder Versuch, auf die JSF-Komponenten auf diese Weise zuzugreifen, fehl. Die in der Eigenschaft onPostRenderFunction angegebene Funktion kann auf die JSF-Komponentenbaumstruktur zugreifen. Da diese Funktion jedoch erst aufgerufen wird, nachdem die Seite wiedergegeben und an den Browser gesendet wurde, sind die Änderungen an der Seite erst sichtbar, wenn der Benutzer die Seite aktualisiert.

Beispiel

Im folgenden Code wird eine 'UIViewRoot'-Variable angegeben, die Variable erstellt und mit einem Texteingabefeld verknüpft:

import com.ibm.egl.jsf.HtmlInputText;
import com.ibm.egl.jsf.UIViewRoot;

Handler  handler01  type JSFHandler
         { viewRootVar=myViewRoot }

  myViewRoot UIViewRoot;

  function changeFieldColor()
    inputVar HtmlInputText;
    inputVar = myViewRoot.findComponent("form1:text1");
    inputVar.setStyle("color : red");
  end
end

Feedback