ManagedBean, Named etc.

melatonin

Mitglied
Hallo, irgendwie verstehe ich folgendes nicht so richtig.

Wenn ich ein Formular habe, kann ich bei den values doch die Attribute von Klassen angeben.

Code:
#{meineKlasse.attr}

Nun habe ich immer gedacht, dass durch die Annotation @ManagedBean als eine Art Singleton umgesetzt wird, und ich pro Request (default RequestScope), genau auf eine Instanz (Klassenname klein geschrieben) aus dieser Klasse zugreifen kann.

Nun bemerke ich, dass es auch ohne diese Annotation geht.
Ausserdem gibt es dann doch noch @Named. Macht das nicht das gleiche (Registrieren).

Wenn ich nun aber eine Instanz dieser Klasse brauche, und es dem Application Server überlassen was für eine Instanz er mir zurückliefert, kann ich doch mit @Inject oder @EJB arbeiten. Was ist da der Unterschied?

Was ich noch sehe (Namespaces), dass bei Inject nur Singleton zugelassen wird?! Oder kann ich da auch die aus EJB (Stateless, Stateful) nutzen?

Es wäre super, wenn darauf jemand kurz eingehen könnte. Irgendwie wirkt das hier alles bei mir doppelt gemoppelt.

Vielen Dank
 
G

gman

Gast
@Named ist Bestandteil von "Context and Dependency Injection (CDI)" welches erst seit Java EE 6
Bestandteil von selbigem ist.

@Inject geht nur bei Attributen von ManagedBeans. Meist werden dadurch Service-Klassen oder
EntityManger injiziert.

Das Thema ist noch um einiges komplexer, ich hoffe ich konnte einige Fingerzeige geben wonach
du weiter suche kannst.
 

melatonin

Mitglied
Sehe ich das richtig, dass @Named auch eine @ManagedBean ist? Also @Named ermöglicht nur nochmehr als ManagedBean?
Es verhält sich so bei mir, ist auch aus jsf zugreifbar.

Beim EntityManager habe ich eigentlich immer nur @PersistenceContext gesehen.
 

melatonin

Mitglied
Danke, aber ich habe mir schon diverse Dokumente durchgelesen.

Das Problem daran ist, dass man dem Tutorial keine Fragen stellen kann.
Hätte ich diese Möglichkeit bei dem von dir genannten Tutorial, dann würde sie folgendermaßen lauten:

Angaben zu @ManagedBean
The @ManagedBean annotation registers the backing bean as a resource with the JavaServer
Faces implementation.
...
The web page connects to the backing bean through the Expression Language (EL) value
expression #{hello.world}, which retrieves the value of the world property from the backing
bean Hello. Note the use of hello to reference the backing bean Hello. If no name is speciied
in the @ManagedBean annotation, the backing bean is always accessed with the irst letter of the
class name in lowercase

Angaben zu @Named
To make a bean accessible through the EL, use the @Named built-in qualifier.

Wo liegt nun der Unterschied? Beide nutze ich in meinem jsf über EL. D. h. beide müssen irgendwo bekannt gegeben sein, also irgendwo registriert.
 
G

gman

Gast
So wie ich das verstehe sind ManagedBeans Bestandteil von JSF und wurden vor Version 2.0 durch
die faces-config.xml konfiguriert. Seit 2.0 sind sie auch durch Annotationen konfigurierbar.

Die Named-Annotation ist wie gesagt Bestandteil von CDI und kam erst mit Java EE 6 dazu und ist
allgemeiner verwendbar, d.h. nicht explizit nur für JSF gedacht.

Irgendwo hab ich mal gelesen (Javalobby auf dzone, glaub ich) das man in Zukunft eher @Named
verwenden sollte und das die ManagedBeans deprecated werden sollten.
 

Ähnliche Java Themen


Oben