JSF が JAR ファイルをスキャンして、JSF アノテーションなどのクラスを検索し、それらを自動登録するには、ファイルにJSF 2.0 準拠のファイルが必要/META-INF/faces-config.xml
です。commons-web-1.0.jar
@ManagedBean
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
つまり、JSF は、クラスパス内のすべての JAR ファイルのすべてのクラスをスキャンするわけではなく、コストが高すぎます。上記のファイルを含む JAR のみ/META-INF/faces-config.xml
がスキャンされます。
また、webapp 自身のファイルの宣言に属性が含まれていないことを確認する必要があります。そうしないと、JSF はこの Faces 構成が完了したと見なし、JAR ファイルをアノテーション用に自動スキャンしません。metadata-complete="true"
<faces-config>
/WEB-INF/faces-config.xml
これらの条件のいずれも満たされない (または満たされる可能性がある) 場合は、注釈に頼るのではなく<managed-bean>
、webapp 自体のように手動で Bean を登録する必要があります。/WEB-INF/faces-config.xml
JSF 2.0仕様の11.4.2章も参照してください(強調鉱山)。
11.4.2 アプリケーションの起動動作
...
このアルゴリズムは、JSF ベースの Web アプリケーションのコンポーネントを組み立てる開発者にかなりの柔軟性を提供します。たとえば、アプリケーションには、関連付けられたレンダラーとともに 1 つ以上のカスタム UIComponent 実装が含まれている場合があるため、「/WEB-INF/faces-config.xml」という名前のアプリケーション リソースでそれらを宣言できます。アプリケーションにプログラムで登録する必要はありません。実例。さらに、アプリケーションは、「META-INF/faces-config.xml」リソースを含むコンポーネント ライブラリ (JAR ファイルとしてパッケージ化) を含めることを選択する場合があります。
このリソースが存在すると、このライブラリー JAR ファイルに格納されているコンポーネント、レンダラー、およびその他の JSF 実装クラスが自動的に登録されます。アプリケーションでアクションを実行する必要はありません。