2009-05-12 14 views
3

Ich habe eine JSP-Struts-Anwendung, die Spring zur Integration in die Dienste/Dao/Datenbank verwendet. Struts verwendet im Grunde Feder, um die Daten aus der Datenbank abzurufen, erstellt das Formular und leitet sie an die JSP-Dateien weiter.Die beste Möglichkeit, den vollständigen Namen des Benutzers in einer JSP-Header-Datei mit einem Spring/Struts-Framework anzuzeigen?

Ich habe eine Header-Datei, die in jeder JSP-Datei mit Fliesen injiziert wird. Ich möchte "Willkommen John Doe" auf jeder Seite in der Kopfzeile zeigen. Wobei "John Doe" der Name des aktuell angemeldeten Benutzers ist.

Was wäre der beste Ansatz, um das zu tun? Die Lösung, die ich denken kann, ist:

  1. Verwenden Sie einen Spring Filter die HTTP-Anfrage zu fangen. Laden Sie den Benutzer aus der Datenbank mit einem Cookie, das die Benutzer-ID (*) enthält, und setzen Sie den Namen in eine Session-Bean mit dem Namen "CurrentUser"

  2. In "header.jsp", erhalten Sie den Frühling Anwendungskontext. Laden Sie die Bean "CurrentUser" und erhalten Sie den Namen. Setzen Sie den Namen in den HTML-Code.

Ich denke, ich könnte dies zur Arbeit bekommen. Aber ich bin mir nicht sicher, ob dies der beste Weg ist. Irgendein Gedanke zu meinem Ansatz?


(*) Natürlich wird das Cookie verschlüsselt werden

Antwort

1

Obwohl es kann für ziemlich einfache Use-Case ein extrem großer Hammer sein, haben wir durch die Verwendung ELResolver eine wirklich ordentliche feder jsp Integration (jsp 2.1 erforderlich!) Bekommen. Durch this tutorial folgenden können Sie grundsätzlich jede Feder Managed Bean in Ihrem el-Kontext injizieren und erlauben es jsp-el wie folgt zugegriffen werden mit:

$ {} spring.mybean.myproperty

Sie können wählen, injizieren vordefinierte bohnen in ihren el-context oder einfach "mybean" zu getBean und erlauben fast alles im frühjahr verwaltet von jsp zugänglich sein. Mybean könnte leicht eine Frühlingsbohne sein.

Ich bin mir nicht ganz sicher, wie das mit Fliesen ausgerichtet wäre.

+0

Tutorial ist jetzt gebrochen Link. – cletus

0

bereits Sie nicht irgendeine Art von User Objekt in Session speichern?

Wenn ja, würde ich nur eine "getFullName()" -Methode zu diesem Domain-Objekt hinzufügen und das DAO füllen, wenn es es zurückgibt. Idealerweise sollten Sie das Objekt User auffüllen, wenn sich der Benutzer anmeldet, in Sitzung speichert und nicht bei jeder Seitenanforderung alle Benutzerdetails erneut aus der Datenbank laden muss.

(Sind Sie nicht mit Spring Security? Wenn ja, sie eine ziemlich einfache Art und Weise bietet ein UserDetails -ähnlichen Objekt in Session zu speichern, und einfachen Zugang zu ihm.)

ich gegen beiden stimmen würde Ihre nähert sich, weil

  1. das bedeutet, (mindestens) einen zusätzlichen Datenbank-Aufruf pro Seite Anfrage
  2. Dies würde nicht funktionieren, wenn andere Benutzer die gleiche Bean im gleichen Kontext geteilt. Außerdem sollten Sie JSP-Dateien (die Ihre Präsentationsschicht sind) wirklich nicht direkt mit Datendiensten interagieren lassen.
+0

Mein Ansatz würde nicht jedes Mal eine Datenbankanforderung ausführen. Ich würde eine Session-Bean mit einem Filter auffüllen. Die Session-Bean wird vom Frühling verwaltet und an die Sitzung angehängt. –