5

私はこの理想主義を達成したいと思います:

  1. SpringまたはWeldのみを使用し、両方は使用しないように、JSFBeanコンテナーの実装を1つだけにする。現在、バックエンドにSpringを使用しているので、Springが好きです。
  2. アノテーションを1つだけ持つには、@ ManagedBean、@ Named、@Modelから選択します
  3. @ RequestScoped、@ SessionScoped、@ ViewScoped、@ FlashScoped、おそらく@ConversationScopedなど、サポートされているすべてのスコープを使用できるようにするには
  4. JSF Beansには、おそらく@Injectまたは@Autowiredを使用して、Spring-Managed-Services(バックエンドサービス)を注入できます。

これまでのところ、これらを達成するための最良の組み合わせを見つけていません。私が知る限り、間違っている場合は訂正してください。

  1. @ManagedBeanはスプリングサービスで注入できませんか?
  2. @Namedは@Injectを使用してSpringサービスを注入できますが、@NamedはWeldを使用しています。Weldの代わりにSpringを使用して@Namedを管理できますか?
  3. @Namedは@ViewScopedとFlashScopeをサポートしていませんか?

あなたの考えや経験を共有してください。

ありがとうございました :-)


2011年3月15日更新

JSR299CDI実装としてJbossWeldをSpringに置き換える方法を説明する興味深いページを見つけました。つまり、基本的に、質問番号2に回答します。スプリングサービスを注入できるようになったので、1番も間接的に答えられます。

しかし、それでも、3番目の質問は残っています。この記事のように、@Namedで@ViewScopedとFlashScopeを使用できると非常に役立ちます。Flashスコープの実装はまだ確認されていませんが、これまでに入手できる最も近いものはこのページです。

うまくいけば、jsr 299の実装で溶接をばねに置き換えることで、@ConversationScopedを使用できるようになります。

今すぐテストする必要があります。幸運を祈ります:-)


2011年3月18日更新

@ Named、@ Injectを実行するには、溶接の代わりにSpring3を正常に使用します。重要なことは、faces-config.xmlでel-resolverを設定することです。

AFAIK、Spring 3は現在CDIをまだサポートしていないため、bye2@ConversationScoped。

スコープについては、@ Scope( "request")または@Scope( "session")を使用する必要がありますが、@ RequestScoped(javax.enterprise.context.RequestScoped)および@SessionScopedを使用する場合は、この記事から提供されるブリッジ。

この記事の春のScope( "view")は魔法のように機能します:-)

ただし、1つの問題が残っています。Scope( "view")-beans間でオブジェクトを渡す方法..幸運を祈ります!


アップデート

ああ..ついに完了..JSF2が提供するFlashを使用して変数を渡すことは、実際には魔法のように機能します。そのためにサードパーティの実装は必要ありません。

つまり、基本的には溶接なしで実行できますが、スプリングを使用すると、ビュースコープを含む一般的なスコープを使用して、ダンはフラッシュオブジェクトを使用してBean間を通過できます。

欠けているのは会話の範囲ですが、これはまだ私にとって大きな問題ではありません。うまくいけば、将来の春はこの会話の範囲をサポートすることができます。

乾杯 :-)

4

2 に答える 2

3

以下のようなManagedPropertyアノテーションを使用してSpringBeanを正常に注入できます。これはJSFマネージドBeanにあります。春の豆はバックエンド用で、私はバックエンドに春が好きです。

@ManagedProperty(name="userRepository", value="#{userRepository}")
private UserRepository userRepository;
//Setter and/or Getter

ここで最も重要なのは価値です。実は春の豆名です。これがお役に立てば幸いです。

于 2012-03-02T10:04:02.053 に答える
2

Weld(実際には、 Java EE 6 CDIとしても知られるJSR-299コンテキストおよび依存性注入リファレンス実装)は、JavaEE6環境でSpringに取って代わるために多かれ少なかれ発明されました。Springの代わりにJavaEE6CDIを使用することをお勧めします。Java EE 6がそのままで同じ機能を提供するのに、なぜサードパーティのフレームワークを使用するのでしょうか。

Springバックエンドを実際に変更できない場合は、混乱やメンテナンスの問題から身を守るために、Java EE 6 CDIアノテーションと混同しないように、それに固執することをお勧めします。

于 2011-03-14T11:27:09.950 に答える