# JSF für Anfänger



## boxi (12. Sep 2007)

Also ich habe gerade angefangen mich in JSF einzuarbeiten.

Nun findet man ja haufenweise Tutorials und Bücher darüber wie man ein Formular erstellt und dessen Daten verarbeitet. Das ist mir klar wie das funktioniert. Nun will ich aber nicht nur einen Datensatz ausgeben, sondern eine Ganze Liste. In JSF gibt es kein foreach oder so... und schon stehe ich vor meinem ersten Problem.
Dazu kommt, dass ich die Daten aber nicht nur anzeigen will, sondern auch darauf Aktionen ausführen. ZB. die Details anzeigen oder editieren usw.

Kann man das in JSF machen... ich habe bis jetzt leider noch kein solches Beispiel gefunden. Also wenn ihr ein Link habt, oder mir das erklären könnt währe ich euch echt dankbar.


----------



## SnooP (12. Sep 2007)

Klaro geht prima mit... dataTables:
http://courses.coreservlets.com/Course-Materials/pdf/jsf/10-Data-Tables.pdf

Da meistens die Anzeige der Daten doch in einer HTML-Tabelle stattfindet... - wenn man sehr customized darstellen will, wird man evtl. doch JSTL mit foreach verwenden wollen... Tomahawk-Tabellen bieten auch noch ein wenig mehr. Aber grundsätzlich sollte man mit dataTables hinkommen.

Wenn du einzelne Zeilen verarbeiten willst, kannst du sehr gut das Standard dataTable-Tag verwenden und die Tabelle mit dem Controller binden "binding = {xyz.datatable}"... dann kannst du auf die zuletzt angeglickte Zeile im Controller zugreifen.
Wenn du sogar die angeclickte Zelle haben musst, d.h. in einer Zeile sind mehrere Zellen mit Links und du brauchst die Unterscheidung, musst du entweder doch nen Parameter noch  mitschleifen und auswerten - oder du benutzt Tomahawk Tabellen und den: <t:updateActionListener>
http://wiki.apache.org/myfaces/ExecutingMethodsFromLinkButtonParameters

Damit geht das ganz großartig  - aber im "Normalfall" hat man ja meistens horizontale Daten, die zeilenweise verarbeitet werden müssen, z.B. via "edit" oder "details" oder was auch immer.


----------



## boxi (12. Sep 2007)

SnooP hat gesagt.:
			
		

> Wenn du einzelne Zeilen verarbeiten willst, kannst du sehr gut das Standard dataTable-Tag verwenden und die Tabelle mit dem Controller binden "binding = {xyz.datatable}"... dann kannst du auf die zuletzt angeglickte Zeile im Controller zugreifen.



Okey... hab die Folien mal angesehen. Das leuchtet mir ein, wie das funktioniert. Aber das mit dem Controller, ist mir noch ein Rätsel, muss ich da in einer Managed Bean einen Controller mit geter und Seter erstellen, oder wie macht man das?


----------



## empi (12. Sep 2007)

Kauf Dir ein Buch!


----------



## boxi (12. Sep 2007)

Danke vielmals für den konstruktiven Beitrag... 

Ich hab ein Buch :### . Leider wird darin die angesprochene Thematik nicht behandelt. Und nein, es ist nicht JSF für Dummis!


----------



## SnooP (13. Sep 2007)

kauf dir nen gutes Buch  ... für Anfänger ist sicherlich
www.jsfpraxis.de
ganz gut geeignet... - enthält aber auch teilweise etwas dürftige Informationen, aber man kommt als Anfänger recht schnell recht weit.

zum Controller - ja genau  ... in der faces-config entsprechend eintragen... die datatable selbst wird bereits über das binding gebinded - d.h. im controller müssen für die dort angegebene Variable ebenfalls getter/setter erstellt werden.


----------



## Guest (28. Okt 2007)

Siehe auch: http://www.jsftutorials.net


----------



## Guest (27. Nov 2007)

bin gerade dabei  mich in jsf einzuarbeiten und stoße gerade im zusammen hang mit dataTable´s und commandButton´s auf große schwierigkeiten da mein managed Bean nicht im sessionScope liegen darf. 
Im requestScope funktionieren commandButtons nicht in dataTables siehe:

http://forum.java.sun.com/thread.jspa?threadID=549675&messageID=2997853

ich hab eine sehr simple suche implementiert diese funktioniert auch wunderbar legt man die bean in die session sind die alten suchergebnisse bei erneuter suche immer noch verhanden und lassen sich auch nicht löschen preserveDataModel &  t:saveState haben den gleichen effekt zwar funktionieren in diesem fall alle buttons aber die alten suchergbnisse werden weiterhin angezeigt. 

Bin ich  nun gezwungen meine Tables mittels JSTL auszugeben oder mit JavaScript zu arbeiten bzw wo liegt mein fehler ?


----------



## maki (27. Nov 2007)

> auf große schwierigkeiten da mein managed Bean nicht im sessionScope liegen darf.


Wieso sollte deine ManagedBean nicht im Session Scope liegen dürfen?




> ch hab eine sehr simple suche implementiert diese funktioniert auch wunderbar legt man die bean in die session sind die alten suchergebnisse bei erneuter suche immer noch verhanden und lassen sich auch nicht löschen preserveDataModel & t:saveState haben den gleichen effekt zwar funktionieren in diesem fall alle buttons aber die alten suchergbnisse werden weiterhin angezeigt.
> 
> Bin ich nun gezwungen meine Tables mittels JSTL auszugeben oder mit JavaScript zu arbeiten bzw wo liegt mein fehler ?



In deiner Action sollten die alten Ergebnisse gelöscht werden.

imho ein sehr gutes Buch: Core JavaServer Faces 2nd Edition


----------

