"Vorinitialisieren" von Beans
Eine Frage, die sich einem Entwickler von JavaServer Faces-
Anwendungen immer wieder stellt, ist die, wie Beans VOR
einem ersten JSF-Request initialisiert werden können.
Oftmals ist es auch gewünscht, dass Parameter mittels
eines Get-Requests (z.B. www.meineAnwendung.de?param1=20)
übergeben werden können.
In JSF jedoch können erst nach einem ersten Request Aktionen
ausgeführt werden, in denen eventuell Beans für weitere
Requests bereitgestellt werden.
Eine Möglichkeit, diese Beschränkung zu umgehen, ist der
Einsatz eines FrontController-Servlets. Dabei wird zunächst
ein Servlet mit den entsprechenden Parametern aufgerufen,
das dann intern die JSF-Beans initialisiert und mit den Werten
befüllt und den Request intern dann auf eine JSF-Seite lenkt.
Bei dem beigefügten Beispiel ist jedoch zu beachten, dass der
Aufruf des Servlets auch über den Faces-Kontext erfolgt. Dies
ist deshalb notwendig, da der Faces-Kontext initialisiert
sein muss, da ansonsten ein Faces-interner Fehler auftritt.
Konkret bedeutet dies, dass das FrontController-Servlet, das
z.B. auf den Namen "Controller" gemappt ist, mittels der URL
www.meineAnwendung.de/faces/Controller?param1=10 aufgerufen
wird.
Im Servlet selbst wird dann wie bereits weiter oben beschrieben
das benötigte Bean erzeugt, mit den Werten des Requests befüllt
und dann auf die eigentliche Faces-Seite weitergeleitet, die dann
das Backing-Bean ganz nach JSF-Manier zur Anzeige bringt.
Die Sourcen selbst gibt's hier.
|