# JSF und JSP gemischt - Empfohlene Vorgehensweise



## miketech (19. Sep 2006)

Hallo zusammen,

mit JSF versuche ich ja Präsentationsschicht und Anwendungslogik voneinander zu trennen. Nun gibt es ja häufig Probleme, wo es nicht einfach so möglich ist einfach nur Inhalte einer Bean in der View darzustellen.

Ich habe mir zur Verdeutlichung folgendes Beispiel überlegt:


-------------------------------------------------

Ich habe eine Tabelle in einer Datenbank mit mehreren Usern. Gespeichert werden Name und die URL zu einem Foto.

Jetzt möchte ich den Inhalt dieser Tabelle darstellen, jeweils 10 Einträge auf einer Seite. Es soll also mehrere Seiten geben, irgendwo steht "1 2 3 .... Letzte" oder so ähnlich zum weiterblättern.

Also z.B. in der Form:

User1
Foto

User2
Foto
...


Seite 1 2 3... Letzte



Kommen wir hiermit zu einem ersten Beispiel:

Die Darstellung der Seitenzahl bzw. der Links. Wie realisiere ich sowas am besten? Hab ich dafür vielleicht ein PageBean, welches den Zähler der aktuellen Seite enthält, welcher dann jeweils geändert wird? 

Und um 10 User darzustellen werde ich ja vermutlich irgendwie JSP verwenden, damit ich nicht 10 mal dasselbe in mein JSF schreibe (sprich eine For-Schleife), oder ist das Pfui? Es gibt ja noch diese Taglib mit der ich auch in PseudoCode solchen Code in mein JSF einbetten kann. Nehm ich das dafür?



Nun soll es so sein, dass wenn ein User kein Foto angegeben hat, dann soll irgendein Default-Bild angezeigt werden. Wie mach ich das nun wieder am geschicktesten? 

Ich muss dazu sagen, dass ich bisher nur aus einfachen Tutorials Beans kenne, die z.B. aktuelle Eingaben der User usw. speichern. Ich hab daher keine Ahnung, wie ich solche Einträge aus der Datenbank überhaupt anzeigen kann. Das ist im Vergleich zu PHP und Co etwas ungewohnt 

Wie gehe ich hierzu also am besten vor? Nehme ich dafür EJBs? Ich habe gelesen, dass ich damit z.B. Persistente Informationen (wie sie ja in meiner Datenbank vorliegen) verfügbar machen kann. Oder ist das total am Thema vorbeigeschossen?


Gruß

Mike


----------



## HLX (19. Sep 2006)

In deinem Falle gibt es auf jeden Fall Lösungsmöglichkeiten ohne Vermischung mit Java-Code. JSF stellt schon eine Menge bereit um zu Verhindern, dass Code in die GUI eingebunden werden muss.

Allerdings solltest du JSF richtig kapiert haben. Mit allem drum und dran. Sonst kommen noch ganz andere Probleme auf dich zu. Ich empfehle: Googlen! Dann lesen, lesen, lesen  :### , dann wieder googlen und wieder lesen  :###... oder ein Buch kaufen/ausleihen. Ich hatte auch ein Nachschlagewerk. Fand ich sehr hilfreich.

EJB brauchst du für diesen Zweck nicht. Wenn dies die einzige Intention ist EJB einzusetzen ist das weit über das Ziel hinausgeschossen. :wink:


----------



## Guest (19. Sep 2006)

Hallo,

gut zu wissen, danke  Ich muss unbedingt mal was mit EJBs machen, um zu kapieren, was ich damit überhaupt soll  Hab mir bereits ein Buch rausgesucht zum Thema Java Server Faces. Ein kleines Beispiel läuft ja schon, nur bevor ich mit meiner PHP-Ich-Hau-Alles-Zusammen-Methode loslege wollte ich lieber sichergehen, dass das nicht auch anders geht.

Noch etwas zu JSF: Wenn ich einen Button habe und eine Action, dann kann ich darauf ja eine Methode legen mit myBean.methodeXY. Kann ich mit dem Rückgabewert nun irgendwie weiterarbeiten?

In der Config für JSF kann ich ja die Navigation festlegen. Kann ich auch sagen: Wenn auf Seite A, der Button X gedrückt wurde und das Ergebnis Z liefert, gehe zu Seite S1. Wenn nicht Z geliefert wird gehe zu S2. 

Oder muss ich bei dem Button erstmal zu einer gemeinsamen Seite S3, dort das Ergebnis auswerten und dann eventuell weiterleiten an S1, oder S2?

Alles so neu und so anders. Ich hoffe der Aufwand lohnt sich  Viele wissen glaub ich überhaupt nicht, dass der ASP.NET Stil auch in Java möglich ist, weil viele in Visual Studio nach 2 Klicks was fertig haben. In Java ist das halt alles etwas anstrengender.

Gruß

Mike


----------



## HLX (19. Sep 2006)

Anonymous hat gesagt.:
			
		

> Noch etwas zu JSF: Wenn ich einen Button habe und eine Action, dann kann ich darauf ja eine Methode legen mit myBean.methodeXY. Kann ich mit dem Rückgabewert nun irgendwie weiterarbeiten?
> 
> In der Config für JSF kann ich ja die Navigation festlegen. Kann ich auch sagen: Wenn auf Seite A, der Button X gedrückt wurde und das Ergebnis Z liefert, gehe zu Seite S1. Wenn nicht Z geliefert wird gehe zu S2.
> 
> Oder muss ich bei dem Button erstmal zu einer gemeinsamen Seite S3, dort das Ergebnis auswerten und dann eventuell weiterleiten an S1, oder S2?


Die Auswertung kannst du in deiner Bean implementieren. Über einen Commandbutton rufst du eine check-Methode auf. Je nach Ergebnis kannst du z.B. als String "zGeliefert" oder "zNichtGeliefert" zurückgeben. Beide Rückgabewerte verarbeitest du in der faces-config.xml:


```
<from-view-id >eingabe.jsp</from-view-id>
<navigation-case>
        <from-outcome>zGeliefert</from-outcome>
        <to-view-id>ausgabe1.jsp</to-view-id>
</navigation-case>
<navigation-case>
        <from-outcome>zNichtGeliefert</from-outcome>
        <to-view-id>ausgabe2.jsp</to-view-id>
</navigation-case>
```


----------



## miketech (19. Sep 2006)

Hi,

ah ok, danke. Ich habe eine Zeit lang mit Ruby on Rails gearbeitet. Das läuft ja auch nach MVC und dabei kann ich noch zusätzlich Ajax verwenden. Das läuft dann so, dass ich eine Methode angebe, die beim Klick z.B. ausgeführt wird und ein Ziel angibt, wohin das Ziel geschrieben wird. Also ich sage z.B. schreibe den Rückgabewert der Methode XY in das div mit der id "Ziel".

Wenn ich das richtig verstanden habe ist JSF ja von Sun standardisiert, bzw. vom JCP. Die aktuelle Spezifikation beinhaltet nichts mit Ajax. Gehört das da überhaupt rein? Ich habe mittlerweile eine Reihe kommerzieller Ajax JSF Frameworks gefunden, die angeblich auf der einen Seite den Standard implementieren, aber auf der anderen Seite das ganze um Ajax-Möglichkeiten erweitert haben.

Gibt es auch Open Source Ajax JSF Varianten? Wenn ich nun Produkte von Drittanbietern einsetze weichen die ja wahrscheinlich von denen vom JCP etwas ab, oder? Bzw. irgendwie wird dieser erweitert. Kannst Du mir irgendein Ajax Toolkit empfehlen?

Gruß

Mike


----------



## tec1 (19. Sep 2006)

Schaue dir mal AjaxAnywhere an, das ist open source und läuft unter anderem auch mit JSF, sogar mit Facelets.


----------

