私はこのページに書かれていることをしましたが、それでもこの問題を解決できませんでした。問題は、web.xml の変更がアプリケーションに影響しないことです。ところで、私は ExceptionHandler を使用しています (org.jboss.solder.exception.control.HandlesExceptions.HandlesExceptions アノテーションを使用して)。ExceptionHandler クラスにメソッドを追加しようとしましたが、FacesFileNotFoundException をインポートできませんでした。アプリケーションは FacesFileNotFoundException をスローしますが、ページに FacesFileNotFoundException 例外クラスをインポートできないのはなぜですか?
2 に答える
エラーページをweb.xmlに正しく追加する必要があります。完全な例外を配置する必要があり、例外がスローされたときにリダイレクトするターゲットの場所はxhtmlではなくhtmlである必要があります。これは非常に重要です。何かでなければなりませんこのような
<error-page>
<exception-type>com.sun.faces.context.FacesFileNotFoundException</exception-type>
<location>/pagenotfound.html</location>
</error-page>
私が知らないのは、例外をコンソールに表示しないようにする方法ですが、この方法で正常に動作します
ExceptionHandler クラスにメソッドを追加しようとしましたが、FacesFileNotFoundException をインポートできませんでした。アプリケーションは FacesFileNotFoundException をスローしますが、ページに FacesFileNotFoundException 例外クラスをインポートできないのはなぜですか?
このcom.sun.*
パッケージは、JSF 実装 Mojarra に固有です。明らかに、コンパイル時のクラスパスに JSF API JAR ファイルがありましたが、JSF 実装 JAR ファイルはありませんでした。
これは大きな問題ではありません。Web アプリケーションを特定の JSF 実装に依存させないようにする必要があります。実装固有のクラスのインポート/参照を避けるようにしてください。はFacesFileNotFoundException
から拡張されjava.io.FileNotFoundException
ているため、代わりにそれをインポートすることをお勧めします。を開封することを忘れないでくださいFacesException
。いくつかのヒントについては、OmniFacesFullAjaxExceptionHandler
およびのソース コードも参照してくださいFacesExceptionFilter
。
Mojarra 固有のものをインポートする必要がありFacesFileNotFoundException
、コードをコンパイルする必要がある場合は、JSF 実装 JAR ファイルをコンパイル時のクラスパスに追加する必要があります。正確な方法は、使用する IDE によって異なります。Eclipse では、 Build Pathで appserver から JSF 実装 JAR ファイルを参照する必要があります。
ExceptionHandler
デフォルトでは、JSF はのエラー ページ宣言に対して何もしないことに注意してくださいweb.xml
。