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?
 
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.
 
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 😛)

Ich werde gleich mal alle Anotationen in meinem Projekt ersetzen.
 
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
 
Mach das besser nur fürjavax.faces.bean.* und javax.annotation.*
Speziell javax.faces.view.ViewScoped wirst du z.B. mitunter noch benutzen wollen.
 
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..
 
Ach viewscoped hast du geschrieben, bin irgendwie auf applicationscope gekommen. Viewscope brauch ich, klar. Danke für den Tipp
 
@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.
 
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.
 
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 ?
 

Neue Themen


Zurück
Oben