Wann welcher Scope aus welchem Paket?

OnDemand

Top Contributor
Hallo zusammen,

kann mir jemand erklären wann ich welches Paket nehmen muss?

zb
import javax.faces.bean.SessionScoped;

vs
import javax.enterprise.context.SessionScoped;

Ich kann irgendwie nicht nachvollziehen welchen ich wann nehme. Derzeit nehme ich java.faces.xxx wenn ich aus einer .xhtml auf eine Bean via ExpressionLanguage gehen will. Den SessionScope aus enterprise.context habe ich genommen um eine Art "Datenhalterobjekt" zu erzeugen, welches aus jeder xhtml Daten bereit halten soll (zb Infos über eingeloggeden User)

Aber so richtig weiß ich nicht, wann ich welchen nehmen muss :( Kann mir das jemand anhand eines Beispiels erklären?
 

stg

Top Contributor
Ersteres gar nicht (mehr), sofern du nicht in alten Umgebungen (oder reinen Servlet Containern ohne CDI Implementierung) herum hantierst.

Ersteres ist die Annotation für eine vom JSF Framework verwaltete JSF Managed Bean. Diese nutzt man aber zugunsten von CDI Beans seit einigen Jahren eigentlich nicht mehr.
CDI Beans kannst du, sofern sie etwa mit @Named und der entsprechenden Scope-Annotation annotiert sind, für die JSF View (fast) genau so verwenden, wie die JSF Managed Beans.
 

OnDemand

Top Contributor
Hallo Stg, vielen Dank! Dann könnte ich ja in Eclipse einstellen, dass er aus diesen Packages nicht mehr importieren kann (vorausgesetzt ich finde die Einstellung :p)

Ich werde gleich mal alle Anotationen in meinem Projekt ersetzen.
 

OnDemand

Top Contributor
Klappt alles, super. Dann kann ich javax.faces.bean verbannen. In Eclipse habe ich es so konfiguriert ,dass das Package javax.faces beim automatischen Import ignoriert wird.

Hab es in Eclipse wie folgt konfiguriert falls es jemanden mal interessiert: Einstellungen > Type Filters (in Suche eingeben) > Add > javax.faces* eingeben und fertig
 

stg

Top Contributor
Mach das besser nur fürjavax.faces.bean.* und javax.annotation.*
Speziell javax.faces.view.ViewScoped wirst du z.B. mitunter noch benutzen wollen.
 

stg

Top Contributor
Für so ziemlich jede "dynamische" JSF View.
Z.B. möchtest du eine Nutzereingabe in einem Formularfeld serverseitig mittels eines Ajax-request validieren, ohne bereits das gesamte Formular abzusenden, Daten zu merken, neu zu laden, die Seite neu aufzubauen usw..
 

OnDemand

Top Contributor
Ach viewscoped hast du geschrieben, bin irgendwie auf applicationscope gekommen. Viewscope brauch ich, klar. Danke für den Tipp
 

OnDemand

Top Contributor
@stg
Hallo nochmal, habe grad bemerkt, dass ich PostConstuct aus jacax.annotations brauche, gibts auch scheinbar nur in diesem Paket oder?

BTW da gleich noch ne Frage ist es in Ordnung in einer Bean (@Named) via PostConstuct Daten aus der DB zu laden um diese in den Inputfeldern vorauszufüllen? Oder gibts da eine bessere rangehensweise?

Möchte, dass der User in der View API Daten hinterlegt, wenn diese bereits in der DB gespeichert sind, möchte ich sie anzeigen lassen.
 

stg

Top Contributor
Ja, da war ich zuvor etwas vorschnell. Das ganze javax.annotation Package zu verbannen ist falsch, wie du richtig festgestellt hast.

BTW da gleich noch ne Frage ist es in Ordnung in einer Bean (@Named) via PostConstuct Daten aus der DB zu laden um diese in den Inputfeldern vorauszufüllen? Oder gibts da eine bessere rangehensweise?

Sofern du nicht direkt die Datenbank abfragst, sondern in deiner Bean einen entsprechenden Service injizierst und diesen nach den Daten fragst, die du benötigst, ist das die übliche Vorgehensweise.
 

OnDemand

Top Contributor
Perfekt danke. Habe ein DAO mit den crud Methoden, dass dürfte der von dir gemeinte Service sein oder? Ist Service die gängigere Bezeichnung dafür ?
 

Ähnliche Java Themen

Neue Themen


Oben