XPages und Managed Beans

von Veit Weber

Mit Release 8.5 haben die XPages Einzug in die Notes-Welt gehalten. Mit XPages lassen sich unter Verwendung moderner Technologien und Konzepte Anwendungen sowohl für den Webbrowser als auch für den Notes-Client erstellen.

Eines dieser Konzepte ist das sogenannte MVC (Model View Controller) Architekturmuster. Mit MVC ist es möglich, die drei Komponenten (Model = Datenmodell, Präsentation = View, Programmsteuerung = Controller) zu strukturieren und somit getrennt von einander zu halten. Obwohl MVC ein relativ "altes" Konzept ist, hat es erst mit dem Aufkommen von Ajax und Web 2.0 wieder eine größere Bedeutung beim Erstellen von Webanwendungen erhalten. So wird es zum Beispiel von Oracle in den JSF 2.0-Anwendungen genau wie in .NET-Anwendungen von Microsoft verwendet.

Ich möchte das M in MVC näher betrachten: das Datenmodell. Mit XPages ist es möglich, dieses Datenmodell in sogenannten Managed Beans zu halten. Unter Manged Beans (auch Beans genannt) versteht man einfache Java-Objekte mit öffentlichen Eigenschaften und Methoden, die an die XPages gebunden werden können.

Es gibt unterschiedliche Arten von Managed Beans. Ich beschränke mich in diesem Artikel auf die sogenannten Stateful Session Beans. Stateful Session Beans sind zustandsbehaftete Java-Objekte, die es genau ein Mal für jede Nutzersession gibt. Mit dieser Art von Bean ist es möglich, Zustände in Variablen auch über mehrere Aufrufe hinweg zu halten. Ihre Sichtbarkeit ist auf die Session begrenzt. Das folgende How-to zeigt nur einen kleinen Ausschnitt der Möglichkeiten. Eine komplette Einführung würde den Rahmen sprengen. Ich möchte einen kleinen Validator erstellen, der es ermöglicht, anhand einer Regular Expression Eingaben zu validieren:

Um Managed Beans entwickeln zu können, müssen Sie im Domino Designer die Perspektive auf "Java" wechseln. Dies ist notwendig, um die Struktur der Domino-Datenbank direkt bearbeiten zu können. Falls diese Perspektive nicht verfügbar ist, wählen Sie sie direkt in der Liste "Other" aus.

Die neue Projektstruktur in Domino-Datenbanken ist ähnlich eines JSF 2.0-Projektes in Eclipse aufgebaut. Fügen Sie daher dem Ordner "WebContent/WEB-INF" einen Ordner "src" hinzu. Anschließend fügen Sie diesen Ordner im BuildPath hinzu. Durch diese Ordnerstruktur werden die Referenzen auf die Beans innerhalb des Projektes gemappt. Nun können Sie die Bean erstellen:

/**
 *  Bean für die Eingabe der Regular Expression
 *  
 *  @author Veit Weber, ULC Business Solutions GmbH
 *  
 */
public  class InputBean
{

  /*
   * Regular Expression - String
   */
  private  String RegEx;

  /**
   *  Konstruktor
   */
  public  InputBean()
  {

  }
  
  /**
   *  Auslesen der Regular Expression
   *  
   *  @return Regular Expression der Bean
   */
  public  String getRegEx()
  {
    return  RegEx;
  }

  /**
   *  Setzen der Regular Expression
   *  
   *  @param regEx
   *           Zu setzende Regular Expression
   */
  public  void setRegEx(String regEx)
  {
     RegEx  = regEx;
  }
}

Als nächstes erstellen Sie den Validator, der später die über die Klasse InputBean getätigte Eingabe im Backend überprüfen soll:

/**
 *  XPages-Validator mit Validierung über Regular Expressions
 *  
 *  @author Veit Weber, ULC Business Solutions GmbH
 */
public  class RegExValidator implements Validator
{
  /**
   *  Validieren der UI - Eingabe
   */
  public  void validate(FacesContext context, UIComponent component, 
    java.lang.Object value)
  {
    // InputBean ueber die Session holen
    ExternalContext exContext = context.getExternalContext();
    HttpSession jsession = (HttpSession) exContext.getSession(true);
    InputBean inputBean = (InputBean) jsession.getAttribute("InputBean");

    try
    {
      // RegEx vorbereiten
      Pattern p = Pattern.compile(inputBean.getRegEx());
      Matcher m = p.matcher(value.toString());

      if  (!m.matches())
        throw  new javax.faces.validator.ValidatorException(
          new  javax.faces.application.FacesMessage("Diese Eigabe ist nicht korrekt!"));
    }
    catch  (Exception ex)
    {
      throw  new javax.faces.validator.ValidatorException(
        new  javax.faces.application.FacesMessage("Fehler: " + ex.getMessage()));
    }
  }
}

Jetzt müssen die Bean und der Validator in die Konfiguration eingetragen werden, damit sie in der Anwendung bekannt sind und eine Bindung vorgenommen werden kann. Öffnen Sie dazu die faces-config.xml und fügen Sie folgende Zeilen hinzu:

<managed-bean> 
<managed-bean-name>InputBean</managed-bean-name>
<managed-bean-class>com.ulc.managedbeans.InputBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<validator>
<validator-id>RegExValidator</validator-id>
<validator-class>com.ulc.managedbeans.RegExValidator</validator-class>
</validator>

Jetzt kann die Bean direkt in der XPage verwendet werden. Erstellen Sie jetzt eine neue XPage mit folgendem Layout:

In das Feld regexBox wird der reguläre Ausdruck eingegeben. Mit dem Button btnSetRegEx wird die Eingabe über ServerSide-Javascript ins Backend übertragen. Die Syntax ist denkbar einfach, denn das wirklich Elegante ist, dass man die Möglichkeit hat, direkt auf die Methoden und Eigenschaften der Bean zuzugreifen:

InputBean.setRegEx(getComponent("regexBox").getValue());

Genau so ist es auch möglich, die Werte einer Bean direkt in der XPage darzustellen:

<xp:label value="#{InputBean.regEx}" id="lblRegRegEx" /> 

Einfach, nicht wahr? Innerhalb der Session existiert jetzt ein Objekt vom Typ InputBean mit dem eingegebenen Wert. Nun müssen Sie nur noch in den Eigenschaften des Feldes inputValue den neuen Validator eintragen:

Geschafft! Der Validator holt sich die InputBean im Backend aus der Session des Users und validiert den String. Probieren Sie es doch gleich aus.

In dem Feld "Regex" können Sie eine Regular Expression eingeben. Das beispielhafte "[+-]?[0-9]+" setzte sich aus zwei Teilen zusammen:

[+-]? : kein oder ein Zeichen aus der Menge [+,-]
[0-9]+ : beliebig viele Zeichen aus der Menge [0..9]

Die Eingaben "16", "-12" und "+200" wären beispielsweise korrekt. Eine Fehlermeldung würden zum Beispiel die Eingaben "x", "--20" und "+ 19" verursachen.

erstellt am 26.10.2010 - bewertet mit 4 von 5
Abgelegt unter: Java, Xpages, JavaBeans, JSF

Bewerten Sie diesen Artikel:


Senden Sie einen Kommentar

Name
E-Mail
Kommentar
FrageGATY-98U89V (bitte diesen Wert in unten stehendes Feld eintragen)
Antwort