web.xml
構成に含まれている現在のJSFプロジェクトを確認しています。
*.xhtml
で構成)com.Sun.faces.config.ConfigureListener
JSF2.2とMojarraの実装を使用しています。
ConfigureListener
について混乱しています。このクラスは構成に必要ですか?このクラスの目標は何ですか?情報が見つからず、クラスにはjavadocがほとんどありません。
この構成を削除すると、すべてが同じように機能するように見えます。したがって、ConfigureListener
は削除できるか、削除する必要があると思いますが、よくわかりません。
ConfigureListener
は通常、Mojarra実装JARファイルの/META-INF/jsf_core.tld
ファイルを介して自動的に登録されます。さらに、ConfigureListener
はサーブレット3.0ServletContainerInitializer
を介して明示的に登録され、古いGlassFish v3のバグを回避します(注:3.0.xではなくv3であるため、実際にはこれまでで最初のGF3バージョンです) 。
.tld
ファイルによる自動登録が不十分な場合があります。よく知られているのは、webappが Jetty にデプロイされたときです。これについては、このQ&Aで詳しく説明されています: ファクトリが見つかりませんでした:javax.faces.context.FacesContextFactory 。
また、前述のように、その詳細な回答で、GlassFish v3には、TLDファイルのスキャンが遅すぎるため、JSFが必要な初期化を適切なタイミングで実行できないというバグがあります。次に、ConfigureListener
をwebappのweb.xml
に明示的に登録する必要があります。
ただし、web.xml
に明示的に登録されていない場合に機能する場合は、使用しないでください。 web.xml
のノイズが少ないほど良いです。ただし、上記の問題の影響を受けやすいコンテナーにデプロイする可能性がある場合(つまり、Webアプリが実際に公開されているコンテナーであり、ターゲットコンテナーの選択を制御できない場合)、「それ"。
Update:このエントリがweb.xml
で有効になっている場合、Tomcat 8.xはバグのある動作を示すようです:このリスナーは実際には2回実行されます一度だけの。結果は悲惨です。とりわけ、すべてのJSFイベントリスナーが2回登録され、コンポーネントライブラリが2回ロードされます。これにより、実行時にのみ競合が発生します。つまり、Tomcatにデプロイするときは、このエントリがweb.xml
から削除されていることを確認してください。