2

InputStream以下のようにマネージドBeanのようにPNGファイルを取得しようとしています:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/myFile.png");
// input is null.

ただし、InputStreamは常に null です。これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

6

リソースを物理的に間違った場所に配置したようです。

カバーのExternalContext#getResourceAsStream()下にあるサーブレット コンテナの場合に に委譲するServletContext#getResoruceAsStream()は、WAR の Web コンテンツにそのルートを持ち (/WEB-INFおよびフォルダの親フォルダ/META-INF、したがって、その中のファイルもこの方法で利用可能)、および/META-INF/resources内のすべての JAR のフォルダ/WEB-INF/lib. JSF Web アプリケーションの場合、通常は XHTML、CSS、JavaScript、および画像ファイルです。

つまり、Web リソースを返します。代わりに必要なため、ディスク ファイル システム リソースは返されませんnew FileInputStream()。また、代わりに必要なため、クラスパス リソースも返しませんClassLoader#getResourceAsStream()。クラスパスのルートは ao/WEB-INF/classesにあり、すべての JAR は/WEB-INF/libにあり、ランタイム環境に応じて VM/サーバーで構成されたいくつかのフォルダーがあります。

通常の Web コンテンツ ファイル構造では、リソース ファイルを目的の方法で取得するには、リソース ファイルを正確にここに配置する必要があります。

WebContent
 |-- META-INF
 |-- WEB-INF
 |    |-- faces-config.xml
 |    `-- web.xml
 |-- myFile.png    <-- Here.
 :
于 2015-03-06T08:45:51.843 に答える