Der Application Support ist eine Bibliothek mit integrativen Code für JSF2, JSF Ext, Spring Framework und JPA / Hibernate. Ziel ist, häufig verwendete Komponenten für den einfachen Aufbau einer Applikation erfolgreich zu kombinieren. Application Support liefert eine Reihe nützlicher Bausteine.

Context#

Während in JSF-Applikationen der JSF-Context durch FacesContext.getCurrentInstance() geliefert werden kann, stellt der Application Support den Spring- und damit meist den allgemeinen Bean-Support durch die Klasse com.intersult.application.spring.Context zur Verfügung:

MethodeBeschreibung
getContextLiefert den (Spring-)ApplicationContext
createEntityManagerLiefert den EntityManager zum Durchführen von Datenbank-Operationen außerhalb der Spring-Injection, wie zum Beispiel beim Bau von Validators und Converters. Der so erhaltene EntityManager muss in jedem Fall in einem try-finally-Block mit der Methode close geschlossen werden. Andernfalls entsteht ein Speicher- und Ressourcen-Leck.

Validators#

Es ist sinnvoll, in Web-Applikationen zwei Arten von Validatoren zu nutzen:
  • Bean-Validators: Die Annotations direkt an Java-Bean-Properties stellen sicher, dass ein Wert nur in einem bestimmten Zustand in die Datenbank geschrieben wird. Bean-Validation in JSF2 validiert die Annotations bereits im Frontend und bietet die Möglichkeit einen Fehler unmittelbar dem Benutzer zu melden. Die Annotations können auch in anderen Beans verwendet werden, die nicht in die Datenbank geschrieben werden. Die saubere Konfiguration wird dabei durch JSF Ext hergestellt.
  • JSF-Validators: Diese Validators werden direkt im Frontend angebracht, also in den XHTML-Dateien. Damit können Felder unterschiedlich validiert werden und Situations abhängige Logik implementiert werden. Zum Beispiel kann gesprüft werden, ob zwei Felder gleich sein müssen. Eine Sonderrolle spielt das Attribut required bei vielen UIInput-Elementen, mit dem eine Eingabe erzwungen werden kann.

Unique-Validator#

Mit dem Unique-Validator kann ein Property geprüft werden, ob es nur einmal in der Datenbank existiert:
<h:outputLabel for="name" value="Name"/>
<h:inputText id="name" value="#{userEdit.user.name}" required="true"
    validator="intersult.Unique"/>

Erklärung: Der Unique-Validator holt sich die Entity-Klasse und Property über die EL-Expression für das Attribut "value" und prüft ob dieser bereits in der Datenbank vorhanden ist. Falls die Bean bereits persistent ist, wird der betreffende Wert außgenommen, sodass die Bean auch mit demselben Wert für das Property geupdatet werden kann.