0

JSF で簡単なブログを作成しようとしています。ただし、同じステートフル ejb インスタンスを 2 つの異なるマネージド Bean に注入する方法がわかりません。@ManagedProperty アノテーションを使用して、注入を間接的に行うことができることを知っています。そんな感じ:

@ManagedBean
@ViewScoped
public class PostController implements Serializable {

private static final long serialVersionUID = 1L;

private Post temporaryPost;

@ManagedProperty(value = "#{authenticationController}")
private AuthenticationController authenticationController;

@Inject
private PostEJB postEJB;

public void save() {
    getTemporaryPost().setAuthor(
            getAuthenticationController().getAuthenticationEJB()
                    .getCurrentSessionUser());
    postEJB.create(getTemporaryPost());
}
    }

脱ぎたい

@ManagedProperty(value = "#{authenticationController}") プライベート AuthenticationController authenticationController;

のように AuthenticationEJB を直接注入します。

@Inject private AuthenticationEJB authenticationEJB;

だから、代わりに

getAuthenticationController().getAuthenticationEJB() .getCurrentSessionUser()

私は手に入れます

authenticationEJB.getCurrentSessionUser()

ただし、問題は、これが現在ログインしているユーザー (ユーザーが null) を含まない新しい authenticationEJB インスタンスであることです。同時に authenticationController.authenticationEJB.currentsessionuser にはログインしているユーザーが含まれています。

前もって感謝します!


最後に答えが出ました!簡単です:

@ManagedProperty(value = "#{authenticationController.authenticationEJB}")
private AuthenticationEJB authenticationEJB;

現在は、同じ authenticationEJB インスタンスを指しています。とはいえ、他にも方法はあると思います。

4

1 に答える 1

0

さて、あなたは答えを得ましたが、多分メモのカップル

  • 注釈PostControllerを付けてBeanを直接注入しないのはなぜですか?@EJB
  • 新しいプロジェクトを開発し、CDI beansJSF マネージド Bean の代わりに使用する場合、それらはすぐに非推奨になります (そして、Java EE スタック全体がゆっくりとどこでも CDI を使用する方向に進んでいます)。
  • 次に、を取り除くことができます@ManagedProperty。すべての Bean (基本的にアプリケーション内の任意のクラスになります) は、@Inject注釈を使用して注入可能になります。同じことが EJB にも当てはまるため、CDI はほとんどの種類の Bean へのアクセスを統一します。
  • 基本的な CDI + JSF チュートリアルはこちら
于 2013-10-02T21:16:11.563 に答える