Faceletsを使用した簡単なJSF2アプリがあります。私のweb.xmlは次のように設定されています:-
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
アプリをデフォルトのウェルカムページ/pages/login.xhtmlに設定したいと思います。ブラウザのコンテキストルートに移動すると、これを取得するためのウェルカムファイル設定を取得できないようです。
私のweb.xmlウェルカム設定は次のとおりです:-
<welcome-file-list>
<welcome-file>/pages/login.jsf</welcome-file>
</welcome-file-list>
ウェルカムページを強制的にログインページに移動させ、facesサーブレットを通過させるにはどうすればよいですか?
次のページを使用すると、ページが表示されますが、facesサーブレットを通過していないため、facesコンポーネントはレンダリングされません。-
<welcome-file-list>
<welcome-file>pages/login.xhtml</welcome-file>
</welcome-file-list>
助けていただければ幸いです。
Login.xhtmlファイルの隣に空のlogin.jsfファイルを作成する必要があります。何らかの理由で、このハックは、サーブレットコンテナをだましてウェルカムファイルが存在すると思わせるために必要です。
注:提供される応答は、作成した空のlogin.jsfファイルではなく、login.xhtmlファイルを使用したJSF応答のままです。
元のソリューションへの追加情報。
これは、バージョン3より前のサーブレットコンテナの下位互換性の必要性にすぎません。たとえば、Glassfish3.1またはTomcat7で実行すると、このような空のファイルを用意する必要がなくなります。 Tomcat6とTomcat7を使用して検証するテストを実行しました。過去に、Glassfishでテストを実行しましたが、現時点ではソフトウェアをTomcat 6で実行しており、3.0サーブレットコンテナではないため、Tomcat6の問題が発生していると想定しました。私はリダイレクト付きのJSPページを使用していましたが、ファセットに完全に移行した後、JSPページが残っているのが嫌いでした。これは、3.0サーブレットコンテナで実行するまでの短期的な優れたソリューションです。それが機能する本当の理由は、すべてがWEB.XMLエントリで行われているのは、ファイルの存在をチェックすることだからです。実際の作業は、facesページへのリクエストをキャッチするため、JSFに処理されます。したがって、その空のページに何もヒットすることはありません。