JSF: Initialisieren einer Property mit Wert?

Status
Nicht offen für weitere Antworten.

JavaFips

Mitglied
Hallo,

es geht mir um Anwendungen mit einer allgemeinen üblichen Seiten-Struktur wie:

* Header (Header-Grafik und ein paar Menüpunkte wie Impressum, AGB, Kontakt, usw.)
* Spalte mit Haupt-Menü
* Spalte mit Content
* Footer

So eine Struktur lässt sich ja grundsätzlich schon mal ganz angenehm über Tiles definieren.

Jetzt hab ich jene Vorgehensweise gewählt, die vom Prinzip her in der PHP-Welt ja weit verbreitet ist, allein schon, weil ich sonst gar nicht wüsste, wie ich es sonst angehen sollte, ohne lauter redundanten (bestenfalls unelegant und unflexibel) oder invaliden HTML-Code zu produzieren (und da die komplette Seite, nicht nur z.B. der Kundenbereich, in JSF / PrettyFaces geschrieben und anschließend konsequent suchmaschinenfreundlich sein soll, muss der HTML-Code schon valide sein ;) ):

Bei jedem Seitenaufruf wird eine JSP aufgerufen, die die seitenspezifischen Daten bereitstellt - und im Prinzip reicht da ja schon ein einziger Index, um in der weiteren Folge alle benötigten Daten aus Arrays bzw. HashMaps oder, wenn es sein muss, auch aus der Datenbank, auslesen zu können - und anschließend eine zentrale JSP inkludiert, die die Seitenstruktur unter Befüllung mit den unterseitenspezifischen Daten (Bezug zum o.g. HashMap-Key) aufbaut.

Beispielsweise wird über irgendwelche HashMaps hinterlegt
(alles Pseudo-Code, wie der geschulte Programmierer sofort merken wird):

________________________________________________________________________________________________

Schlüssel "impressum": Seitentitel = "Impressum", Description = "Unser Impressum", Content = "_impressum.jsp", Seitenueberschrift = "Impressum"

Schlüssel "kontakt": Seitentitel = "Kontakt", Description = "Nehmen Sie Kontakt auf", Content = "_kontakt.jsp", Seitenueberschrift = "Kontakt aufnehmen..."

usw.

________________________________________________________________________________________________

Die jeweils aufgerufene Seite soll also nur den Schlüssel für die hinterlegten HashMaps setzen, sodass die unmittelbar darauf inkludierte zentrale JSP (nennen wir sie mal main.jsp) die richtigen Daten für <title>...</title>, <meta name="description" content="..."></meta>, den Content-Bereich, usw. bereitgestellt bekommt.

Bsp.:

impressum.jsp:

______________________________

setze Schlüssel = "impressum"
inkludiere main.jsp
______________________________


main.jsp (im Endeffekt wiederum zerlegt in ein paar Tiles-Seiten):
__________________________________________________

...

<html>
<head>
<title>hole den zum Schlüssel passenden Titel</title>
<meta name="description" content="hole die zum Schlüssel passende Description"></meta>

...

Einbindung des zum Schlüssel passenden Contents

...

__________________________________________________



Jetzt gibt es noch ein eigentlich kleines, aber doch gewichtiges Problem beim Setzen des HashMap-Schlüssels:

Wie lässt sich in JSF ein Wert (typischerweise Property) setzen?
Ich suche also so etwas wie <jsp:setProperty ... >, was sich reibungslos in JSF einfügt.
Wenn ich z.B. aus JSF heraus den Bean-Konstruktur mit Parameter aufrufen könnte, wäre das Problem gelöst.




.
 
Zuletzt bearbeitet:

vinculum

Mitglied
Du kannst das gewünschte einfach über die Einbindung normalen Codes in die JSP-Seite lösen: <%! Java Code %>. Dort kannst du dann den Schlüssel laden usw. und hast auch Zugriff auf das Session Objekt.
Ich würde jedoch versuchen beim klicken auf den Link bereits die benötigten Informationen mitzugeben, beispielsweise im Request.
 

vinculum

Mitglied
Du kannst den Links immer wie bei PHP auch einen Parameter mitgeben, dieser wird dann in einer Applikation nach Model, View, Controller Archtektur vom Controller ausgewertet und die entsprechenden Parameter gesetzt. Das ist das im Allgemeinen übliche Vorgehen.

Informationen zu MVC findest du hier: Model View Controller ? Wikipedia
 
Zuletzt bearbeitet:

JavaFips

Mitglied
.


Danke vinculum, mit Deiner Hilfe hab ich es endlich geschafft! ;)


Hier die Lösung im Auszug für die Nachwelt:


In die JSP-Dateien kommt in der Einleitung:

Java:
<% request.setAttribute( "seite", "impressum" ); %>

, wobei für "impressum" der jeweilige HashMap-Key eingetragen wird.

Die Bean-Klasse benötigt folgende Imports:

Java:
import javax.servlet.http.HttpServletRequest;
import javax.faces.context.FacesContext;

Und die getter-Methode liefert den Seiten-Schlüssel folgendermaßen:

Java:
    public String getSeite()
    {
        HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();

        if ( req.getAttribute ( "seite" ) != null )
        {
            seite = req.getAttribute ( "seite" ).toString();
        }
        else
        {
            seite = null;
        }


Damit können sämtliche seitenspezifischen Daten angenehm aus HashMaps geholt werden.




.
 
Zuletzt bearbeitet:

JavaFips

Mitglied
Was für eine Möglichkeit gibt es - auch wenn man Scriptlets so weit wie möglich meiden sollte - Code-Aufrufe wie oben:

Code:
<% request.setAttribute( "seite", "impressum" ); %>

aus Facelets heraus vorzunehmen?
 
M

maki

Gast
Mir scheint, da werden ein paar Dinge durcheinander geworfen...

JSF ist nicht MVC, JSF ist MVP (Model View Presenter).
Tiles ist vollkommen überflüssig(ausser du bist masochist), nimm doch gleich Facelets, da kannst du dir schön deine Komponenten schreiben.
Scriptlets waren schon imemr daneben, aber in JSF sind sie besonders daneben.
PHP kann man nicht als Vergleich für JSF nehmen, da JSF ein Komponententechnologie ist, wie zB. Swing.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M In einer HTML Tabelle positionieren Web Tier 4
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Popup mit einer Checkbox Auswahlliste Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
M JSF JSP, Facelets und einbinden einer js-Datei Web Tier 2
J JSF Initialisierung einer ApplicationScoped Bean Web Tier 2
J Anzeige einer Hierarchie Web Tier 5
M Exception beim Erstellen einer Query Web Tier 9
N JSF Architektur/Design einer JEE 6 + JSF 2.x Webanwendung mit Subdomänen Web Tier 4
J Performance einer Webanwendung Web Tier 2
V JSF Rendering abhängig von einer Auswahl Web Tier 8
P JSF Merkwürdiges Verhalten einer Bean Web Tier 11
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
X JSP Auslesen der Daten einer Session Web Tier 3
J Servlet Manuelles Rendern einer JSF Datei Web Tier 4
1 JSP Mit Daten einer c:forEach Rechnen ? Web Tier 4
H Seiten-reload als Result einer Action Web Tier 3
N Wie mache ich in einer xhtml (JSF) einen redirect? Web Tier 3
F Prinzipielle Architektur einer Web-Anwendung Web Tier 4
A [JSF 2.0] Ausgabe aus Schleife bzw. einer ArrayList Web Tier 9
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
K Analye einer Seite (Java, JSP, ...) Web Tier 12
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
O Focus auf Textfeld, in letzter Reihe einer dataTable Web Tier 2
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
C PanelGrid aus einer Liste Web Tier 3
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
S Attribute einer HttpSession / unchecked cast Web Tier 8
Schandro JSP soll dynamische Anzahl an Parametern einer JavaScript-Function erzeugen Web Tier 8
N Architektur einer Such-Webanwendung Web Tier 4
E Methode einer Bean aus anderer Bean aufrufen Web Tier 10
F Redirect nach Aufruf einer JSP Web Tier 5
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
C navigation auf einer jsp Seite Web Tier 3
pusteblume Mehrere Objekte einer Bean Web Tier 10
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
F Darstellung einer Tabelle mit JSP Web Tier 4
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9
FINF_AW_Alex Bin ich jetzt bekloppt?!? / Property not found (resolved tu null) Web Tier 5
M javax.el.PropertyNotFoundException: Property 'bezeichnung' not found on type Entities.Produkt Web Tier 2
FINF_AW_Alex EJB - property nicht vorhanden Web Tier 6
F JSP Problem mit Property Web Tier 0
Phash JSF - SelectOneMenu Property anzeigen Web Tier 3
C JSF Methoden in Backing-Bean als JSF-Property Web Tier 3
P JSF static method: property not found Web Tier 5
E JSF JSF findet Property im ManagedBean nicht Web Tier 5
D JSF EL #{not null bean.property} Parse exception Web Tier 2
F Property nicht gefunden (trotz getter und setter) Web Tier 3
F Property in ManagedBean nicht gefunden? Web Tier 3
C jstl: collection property auf mehrere seiten Web Tier 2
L JSF: Property not found Exception Web Tier 2
W JspPropertyNotFoundException Jsp findet Property nicht?? Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben