CDI kullanın.
JSF 2.3 uyarınca, @ManagedBeanbir kaldırıldı . Ayrıca 1417 numaralı spesifikasyona bakın . Artık seçmek için bir neden yok olduğunu bu araçlar @ManagedBeanüzerinde @Named. Bu ilk olarak Mojarra 2.3.0 beta sürümü m06'da uygulandı.

Tarih
Temel fark, @ManagedBeanJSF çerçevesi tarafından yönetilir ve yalnızca @ManagedPropertybaşka bir JSF tarafından yönetilen çekirdekler aracılığıyla kullanılabilir. @NamedCDI çerçeve ile uygulama sunucusu (konteyner) tarafından idare edilmekte ve yoluyladır olduğu @Injectgibi bir kap yönetilen dışlayıcı her türlü uygun @WebListener, @WebFilter, @WebServlet, @Path, @Stateless, vb ve hatta JSF @ManagedBean. Diğer taraftan, @ManagedPropertyyok değil bir içinde çalışma @Namedya da başka bir kap yönetilen eser. Gerçekten sadece içeride çalışıyor @ManagedBean.
Diğer bir fark da, CDI'nın istek başına / iş parçacığı temelinde hedef kapsamdaki geçerli örneğe delege eden proxy'leri gerçekten enjekte etmesidir (EJB'lerin nasıl enjekte edildiği gibi). Bu mekanizma, JSF ile mümkün olmayan, daha geniş kapsamdaki bir fasulyeye daha dar kapsamdaki bir fasulyenin enjekte edilmesine izin verir @ManagedProperty. JSF, burada fiziksel örneği doğrudan bir ayarlayıcıyı çağırarak "enjekte eder" (bu da tam olarak bir ayarlayıcıya ihtiyaç duyulduğu halde bununla birlikte gerekli değildir@Inject ).
Doğrudan bir dezavantaj olmasa da - başka yollar da vardır - kapsamı @ManagedBeansınırlıdır. Diğer bir bakış açısıyla, "çok fazla" ifşa etmek istemiyorsanız @Inject, yönettiğiniz fasulyeleri de saklayabilirsiniz @ManagedBean. protectedKarşı gibi public. Ama bu gerçekten sayılmaz.
En azından JSF 2.0 / 2.1'de, JSF destek çekirdeklerini CDI tarafından yönetmenin en büyük dezavantajı, CDI eşdeğeri olmamasıdır @ViewScoped. @ConversationScopedYakın gelir, ama yine de el başlatma ve durdurma gerektirir ve çirkin ekler cidsonuç URL'lerin istek parametresini. MyFaces CODI, JSF'leri CDI'ya tamamen şeffaf bir şekilde köprüleyerek işi kolaylaştırır, javax.faces.bean.ViewScopedböylece bunu yapabilirsiniz @Named @ViewScoped, ancak bu windowId, sonuç URL'lerine, ayrıca düz vanilya sayfadan sayfaya gezinmeye çirkin bir istek parametresi ekler . OmniFaces , tüm bunları @ViewScoped, fasulyenin kapsamını rastgele bir istek parametresi yerine JSF görünüm durumuna gerçekten bağlayan gerçek bir CDI ile çözer .
JSF 2.2 (bu soru / cevaptan 3 yıl sonra piyasaya sürülür) @ViewScoped, kutusundan yeni bir tam CDI uyumlu açıklama sunar javax.faces.view.ViewScoped. JSF 2.2 , eşdeğeri @FlowScopedolmayan yalnızca bir CDI ile birlikte gelir ve böylece @ManagedBeanJSF kullanıcılarını CDI'ya doğru iter. Beklenti şudur @ManagedBeanve arkadaşlar Java EE 8 uyarınca kullanımdan kaldırılacaktır. Halen kullanıyorsanız @ManagedBean, gelecekteki yükseltme yollarına hazırlıklı olmak için CDI'ya geçmeniz şiddetle tavsiye edilir. CDI, WildFly, TomEE ve GlassFish gibi Java EE Web Profili ile uyumlu kaplarda kolayca bulunur. Tomcat için, aynen JSF için yaptığınız gibi, ayrı olarak yüklemeniz gerekir. Ayrıca Tomcat'e CDI nasıl kurulur?