JSF --- Controlleraufruf bei jedem Request

Hi!

In einer JSF1.2 WebApp soll bei jedem Request derselbe Programmcode ausgeführt werden. Darin soll mit den Requestparametern und der Session gearbeitet werden.

Könnte mir bitte jemand von euch einen Tip geben, wie ich das erreichen kann?

LG

Daniel

7 JavaServer Faces Technology (Release 7)

was genau willst du machen?

wirklich JSF1.2?

und wozu bei jedem Request das gleiche Programm? du kannst die gleiche JSF ja auf verschiedene URLs antworten lassen

speziell zu JSF kann ich nichts sagen, aber in einfachen Servlets gedacht helfen Basisklassen mit nur einer doGet()-Methodenimplementierung
oder im Notfall Methodenaufrufe bei jedem Einstieg des eigenen Programms, dann muss man schlicht dazu aufpassen,

idealerweise alle solche notwendigen separaten Klassen zu Statisten/ Schalen degradieren und allein mit einer Aufgabe ausstatten:
Aufruf einer Methode der RICHTIGEN Klasse(n), die dann mit Basisklasse usw. sauber aufgebaut sind,

bei einem WebRequest bietet es sich absolut an, am Anfang (und Ende) gemeinsame Funktionalität zu haben:
Session, User, Berechtigungen des Users/ der angefragten Seite prüfen, Parameter prüfen/ umwandeln (von simpler Session/ Parameter-Liste zu komplizierten Anwendungsobjekt),
aktuelle Aktion im Kontext vorherigerer Aufrufe/ laufender größerer Vorgänge prüfen, Hintergrunddaten dafür evtl. reaktivieren/ mergen,
evtl. mit Fehler ablehnen und zu Fehlerseite/ Startseite verweisen, Loggen,
um Ressourcen wie DB-Sessions kümmern (nicht unbedingt gleich anfordern, aber Kontrollstrukturen dafür aufbauen) und wer weiß was alles,
da bin ich ein Fan :wink:

vieles davon sicher auch Aufgabe des Frameworks, aber sobald das nicht 100% funktioniert bzw. nach Wünschen konfigurierbar ist, ist man aufgeschmisssen,
immer eine Gradwanderung wieviel man selber übernimmt,
intessanter Meta-Gedanke dann immer evtl. Wechsel auf anderes Framework, wieviel funktioniert dann noch da unabhängig, wieviel nicht?
Meta-Meta-Gedanke ist dann allerdings Schaffung eines eigenen x-ten Standards…

aber ich bin wohl etwas übers Ziel hinausgeschossen :wink:

JSF 1.2 ist Steinalt, aber wenn es sein muss, ja nachdem was gemacht werden soll wuerde ich zB. zu einem Servlet Filter raten.

Was ist denn das fuer Ominoeser Programmcode der da immer abgearbeitet werden soll?

Danke erstmal für eure Antworten. :slight_smile:

Konkret geht es um eine WebApp, welche schon seit 12 Jahren existiert. Alle Requests werden an ein dickes FrontControllerServlet gerichtet, welches die Requests zerpflückt und zum Schluss einen RequestDispatcher.forward() macht. Forwarded wird immer auf eine JSP, welche den Maincontent, durch einen jsp:include anzeigt.

Jetzt will ich JSF1.2 (Kompatibilität) in dieser App einsetzen, aber wenn der jsp:include eine JsfSeite anzeigen soll, dann erhält man einen: Cannot forward after response has been committed. D.h. mein Controller und der Controller vom JSF pfuschen sich gegenseitig in die Arbeit.

Optimal wäre es, wenn man eine Methode einer z.B. ManagedBean bei jedem Request durchlaufen lassen könnte.

IMHO/IME: Das mit JSF bei so einer alten Anwendung draufsetzen ist keine Gute Idee, und JSF 1.2 ist auch zum weglaufen.

Du kannst einen PhaseListener definieren. Dieser wird zumindest bei jedem Request durchlaufen (in Deiner gewünschten Phase).

[QUOTE=dpo]Danke erstmal für eure Antworten. :slight_smile:

Konkret geht es um eine WebApp, welche schon seit 12 Jahren existiert. Alle Requests werden an ein dickes FrontControllerServlet gerichtet, welches die Requests zerpflückt und zum Schluss einen RequestDispatcher.forward() macht. Forwarded wird immer auf eine JSP, welche den Maincontent, durch einen jsp:include anzeigt.

Jetzt will ich JSF1.2 (Kompatibilität) in dieser App einsetzen, aber wenn der jsp:include eine JsfSeite anzeigen soll, dann erhält man einen: Cannot forward after response has been committed. D.h. mein Controller und der Controller vom JSF pfuschen sich gegenseitig in die Arbeit.

Optimal wäre es, wenn man eine Methode einer z.B. ManagedBean bei jedem Request durchlaufen lassen könnte.[/QUOTE]

Die Methode beißt sich einfach mit dem ganzen JSF-Lifecycle, ich würde den funkionierenden Teil nicht mehr anrühren, sondern lieber JSF parallel verwenden. Wenn nötig, Teile aus dem alten Frontcontroller refactorn und als unabhängige Funkionalität zur Verfügung stellen.

Danke euch nocheinmal.

Ich habe mich jetzt doch entschieden, die alte Architektur zu 100% beizubehalten, weil alles andere unnötig viel Arbeit machen würde.

Gute Entscheidung IMHO