私はかなり標準的なアーキテクチャを使用しており、ページはとPrimeFaces
の注釈が付けられたクラスでログイン アクションを呼び出します。javax.inject.@Named
javax.enterprise.context.@SessionScoped
Faces サーブレットを適切に呼び出す必要がある場合でも、このdoLogin()
メソッドは から null を受け取ります。FacesContext.getCurrentInstance()
私はかなり標準的なアーキテクチャを使用しており、ページはとPrimeFaces
の注釈が付けられたクラスでログイン アクションを呼び出します。javax.inject.@Named
javax.enterprise.context.@SessionScoped
Faces サーブレットを適切に呼び出す必要がある場合でも、このdoLogin()
メソッドは から null を受け取ります。FacesContext.getCurrentInstance()
FacesContext.getCurrentInstance()
基本的に「 null を返すのは、マネージド Bean スレッドの外部で呼び出されたときだけです」という投稿が多数あります。しかし、別のフォーラムで、それを引き起こすビルド/クラス ローダーの問題を特定した 1 つの投稿を見つけました。どういうわけか、不適切に指定された依存関係が原因で、FacesContext
クラスがコンテナー用に読み込まれ、アプリ用に再度読み込まれる可能性があります。つまり、シングルトンのはずが 2 つのシングルトンに変わります (どういうわけか...?)。とにかく、私はこれを投稿して修正を記録しますが、症状の背後にある問題を完全に説明するためではありません.
を使用して、 forJBoss Developer Studio
で構築しています。とのモジュールが付属しています。ここに保存されている2.1を使用したい:Maven
JBoss EAP 6.2
EAP
JSF 1
JSF 2.1
C:\JBoss\jboss-eap-6.2.0\modules\system\layers\base\javax\faces\api\main.
私のEJB
プロジェクトPOM
では、 の依存関係を誤って追加したためjsf-api
<scope>compile
、上記のようにFacesContext.getCurrentInstance()
返されました。null
解決策は次のとおりです。POM
私のプロジェクトejb
と私のweb
プロジェクトに、この依存関係を追加しました。
<dependency>
<groupId>org.jboss.spec.javax.faces</groupId>
<artifactId>jboss-jsf-api_2.1_spec</artifactId>
<scope>provided</scope>
</dependency>
そして、デプロイされたejb
プロジェクトJBoss
が、これで公開されることを確認する必要があることも伝えていることを確認するにはMANIFEST.MF
:
Dependencies: javax.faces.api:main
これは、ビルド プラグインが作成されたプロジェクトMaven
の にアーカイブ構成を配置することによっても実行できます。POM
ejb
<!-- most of this <build> element was already in my POM -->
<build>
<plugins>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
<!-- I added this <archive> element to tell Maven to add the dependency line in MANIFEST.MF -->
<archive>
<manifestEntries>
<Dependencies>javax.faces.api:main</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
私の場合、maven-ejb-plugin
エントリはすでにそこにあり、既存の .xml ファイルにアーカイブ定義を追加しただけ<configuration>
です。ejb-jar-plugin または ejb-war-plugin でビルドしている場合は、同じ<archive>...</archive>
定義を使用できると思います。