CDIを使用します。
JSF 2.3に従って、@ManagedBean
は非推奨になりました。仕様の問題1417も参照してください。@ManagedBean
これは、を選択する理由がもうないことを意味します@Named
。これは、Mojarra2.3.0ベータバージョンm06で最初に実装されました。

歴史
主な違いは、 JSFフレームワークによって管理され、別のJSF管理対象Bean@ManagedBean
でのみ利用可能であるということです。CDIフレームワークを介してアプリケーションサーバー(コンテナ)によって管理され、、、、、、などのあらゆる種類のコンテナ管理アーティファクト、さらにはJSFでも利用できます。反対側からは、または他のコンテナ管理アーティファクトの内部では機能しません。それは実際には内部でのみ機能します。@ManagedProperty
@Named
@Inject
@WebListener
@WebFilter
@WebServlet
@Path
@Stateless
@ManagedBean
@ManagedProperty
@Named
@ManagedBean
もう1つの違いは、CDIは、(EJBが注入される方法のように)要求/スレッドごとに、ターゲットスコープ内の現在のインスタンスに委任するプロキシを実際に注入することです。このメカニズムにより、範囲の狭いBeanを範囲の広いBeanに注入できます。これは、JSFでは不可能@ManagedProperty
です。JSFは、ここでセッターを呼び出すことによって物理インスタンスを直接「注入」します(これが、セッターが必要な理由でもありますが、では必要ありません@Inject
)。
直接的な不利益ではありませんが(他の方法もあります)、範囲@ManagedBean
は単純に制限されています。別の見方をすれば、「あまりにも多く」を公開したくない場合は@Inject
、管理対象Beanをそのままにしておくこともできます@ManagedBean
。それはprotected
対のようなものpublic
です。しかし、それは実際には重要ではありません。
少なくとも、JSF 2.0 / 2.1では、JSFバッキングBeanをCDIで管理することの主な欠点は、に相当するCDIがないことです@ViewScoped
。は@ConversationScoped
近づいていますが、それでも手動で開始および停止する必要があり、cid
結果のURLに醜いリクエストパラメータを追加します。MyFaces CODIを使用すると、JSFjavax.faces.bean.ViewScoped
をCDIに完全に透過的にブリッジできるため、簡単に実行できます。ただし、単純なバニラページ間ナビゲーションでも、結果のURLに@Named @ViewScoped
醜いリクエストパラメーターが追加されます。OmniFacesは、Beanのスコープを任意のリクエストパラメータではなくJSFビューステートに実際に結び付ける真のCDIを使用して、これをすべて解決します。windowId
@ViewScoped
JSF 2.2(この質問/回答の3年後にリリースされます)は、@ViewScoped
フレーバーのフレーバーで、箱から出して新しい完全にCDI互換の注釈を提供しますjavax.faces.view.ViewScoped
。JSF 2.2に@FlowScoped
は、同等のものがないCDIのみが付属しているため@ManagedBean
、JSFユーザーはCDIに向かっています。Java EE 8に従って、および友人は非推奨になることが予想@ManagedBean
されます。したがって、現在もを使用している場合は@ManagedBean
、将来のアップグレードパスに備えてCDIに切り替えることを強くお勧めします。CDIは、WildFly、TomEE、GlassFishなどのJava EEWebProfile互換のコンテナーですぐに利用できます。Tomcatの場合は、JSFの場合とまったく同じように、個別にインストールする必要があります。TomcatにCDIをインストールする方法も参照してください。