2013-09-24 16 views
6

Ich bin mit Java EE 6 auf Jboss eap 6 und meine JSF Bohnen werden wie folgt kommentierte: @ManagedBean @ViewScoped (beide von javax.faces.bean Paket)Viewscoped JSF und CDI Bean

jedoch Sie sind auch CDI-Beans (Standardkonstruktor, Verwendung von @Inject @ PreDestroy usw.). Ich lese die ganze Zeit, dass Sie diese Anmerkungen (JSF und CDI) nicht mischen können, aber es funktioniert offensichtlich gut: Injektionen arbeiten, preDestroy wird auf Ansicht Änderung usw. genannt). Fehle ich etwas? Was ist das Problem? Warum nicht benutzen?

Antwort

9

Der CDI @Inject arbeitet "überall" und somit auch innerhalb von JSF @ManagedBean. Das JSF-Gegenstück @ManagedProperty arbeitet nur innerhalb von @ManagedBean. Sie können auch keine echte JSF-verwaltete Bean in einer CDI-verwalteten Bean @Inject (stattdessen wäre es eine CDI-verwaltete Instanz). Vielleicht hast du darüber gelesen. Ein allgemeiner Konsens ist jedoch in der Tat, sie vorzugsweise nicht zu mischen, um eine Verwirrung zwischen Startern zu vermeiden. JSF utility library OmniFaces hat eine CDI-kompatible @ViewScoped für JSF 2.0/2.1.

Die @PreDestroy ist übrigens nicht spezifisch CDI, noch ist ihr Gegenstück @PostConstruct. Sie sollten sowohl in CDI-verwalteten Beans als auch in JSF-verwalteten Beans problemlos funktionieren.

+0

Vielen Dank für die Antwort. Scheint, ich bin wirklich verwirrt über all diese Dinge ... Also was ich habe ist eine JSF Managed Bean, anstatt eine CDI Bean? Auch wenn diese Bean alle Anforderungen erfüllt, sollte man sich über eine CDI-Bean-Dokumentation unterhalten (Standardkonstruktor, nicht innere Klasse usw.)? Wenn ja, was ist der Unterschied zu einer CDI-Bean? Was sind die Nachteile oder was kann ich nicht mit dieser Bohne machen, die ich mit einer CDI-Bohne machen kann? – htft

+0

Sie können die JSF-Instanz für verwaltete Bean nicht an anderer Stelle "injizieren". Wenn Sie es nicht wirklich brauchen, dann gibt es keinen wirklichen Nachteil. Es sollte jedoch angemerkt werden, dass JSF sich langsam zu CDI bewegt. Bevorstehende neue JSF-spezifische Annotationen wie '@ FlowScoped' sind CDI-only. Die JSF '@ ManagedBean'-Einrichtung wird in naher Zukunft eingestellt. Benutzer werden ermutigt, zu CDI zu wechseln, bevor es passiert. – BalusC

Verwandte Themen