XPages und Managed Beans
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:
Funktionsschema |
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.
Umschalten auf Java-Perspektive |
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:
XPage im Designer |
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:
Eigenschaften des Feldes "regexBox" |
Geschafft! Der Validator holt sich die InputBean im Backend aus der Session des Users und validiert den String. Probieren Sie es doch gleich aus.
Die Managed Beans in Aktion |
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.
Abgelegt unter:
Bewerten Sie diesen Artikel:






Senden Sie einen Kommentar