# Wann welcher Scope aus welchem Paket?



## OnDemand (25. Aug 2017)

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 (25. Aug 2017)

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 (25. Aug 2017)

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.


----------



## OnDemand (25. Aug 2017)

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 (25. Aug 2017)

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


----------



## OnDemand (25. Aug 2017)

Gut danke, hast du ein Beispiel wo man das benutzen könnte? Bisher hab ich dafür noch keine Verwendung gehabt


----------



## stg (25. Aug 2017)

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 (25. Aug 2017)

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


----------



## OnDemand (30. Aug 2017)

@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 (30. Aug 2017)

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



NicoDeluxe hat gesagt.:


> 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 (30. Aug 2017)

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 ?


----------

