JSFに依存するライブラリを使用しています。
プロジェクトを実行しようとすると、次の例外メッセージが表示されます。
Java.util.MissingResourceException: Can't find bundle for base name /Bundle, locale en_US
at Java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.Java:1427)
at Java.util.ResourceBundle.getBundleImpl(ResourceBundle.Java:1250)
at Java.util.ResourceBundle.getBundle(ResourceBundle.Java:705)
何か案は ?
例外は、クラスパスのルートにBundle_en_US.properties
、またはBundle_en.properties
、または少なくともBundle.properties
ファイルが必要ですが、実際にはないことを示しています。
上記のファイルの少なくとも1つがクラスパスのルートに存在することを確認してください。または、適切なバンドル名を指定してください。たとえば、バンドルファイルが実際にパッケージcom.example.i18n
に配置されている場合、Bundle
の代わりにcom.example.i18n.Bundle
をバンドル名として渡す必要があります。
Eclipse "Dynamic Web Project"を使用している場合、クラスパスのルートはJavaパッケージがあるsrc
フォルダーで表されます。 Mavenプロジェクトを使用している場合、リソースファイルのクラスパスルートはsrc/main/resources
フォルダーで表されます。
maven-Tomcat-plugin
/maven-Tomcat7-plugin
を使用してプロジェクトを開始する場合、Bundle.properties
またはResource.properties
をsrc/main/webapp/WEB-INF/classes
に配置する必要があります。プラグインがどのようにTomcatを偽造するのか、理由を聞かないでください。
私は同じ問題を抱えていて、手すりの解決策はそれを修正しました。
記録のために:
WEB-INF\faces-configは
<?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">
<application>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
<message-bundle>
Message
</message-bundle>
</application>
</faces-config>
そして、mkyongのチュートリアルの後、WebContent\Resourcesの下にMessage.propertiesがありました
バンドルの名前を「Message_en_us」および「Message_en」に変更した場合でも、厄介な例外が発生しました。 src \への移動は機能しました。
誰かがリソースの下でバンドルを機能させるために行方不明の部分を投稿した場合、それは美しいものになるでしょう。
Eclipseで.Javaファイルを実行している場合は、ビルドパスにリソースパスを追加する必要があります。その後、このエラーは表示されません
私の場合、問題は「en-US」の代わりにLocale.forLanguageTag(..)
で言語タグ「en_US」を使用していました-下線の代わりにダッシュを使用してください!
また、Locale.forLanguageTag("en-US")
またはnew Locale("en_US")
の代わりにnew Locale("en_US")
を使用して、地域( "US")で言語( "en")を定義しますが、new Locale("en")
は機能します。
私の場合、SpringBootプロジェクトを扱っていましたが、同じ例外が発生しました。
解決策は、env.propertiesファイルをクラスパスに追加(つまり、src/main/resourceフォルダー)によって作成されます。問題の原因は、log4j構成に次のようなプロパティがあったことです
<Property name="basePath">${bundle:env:log.file.path}</Property>
この問題は解決できました。リソースはプロジェクトディレクトリにありましたが、junitユーティリティがそれを読み込もうとすると、MissingResourceExceptionのエラーが返されていました。そして、その理由は、リソースがテストクラスパッケージのクラスパス上にないため、Eclipseのクラスパスパスエントリにcfg /フォルダーを追加し、ビルドconfの出力ディレクトリを同じクラスパッケージに設定したときに問題が発生しました解決しました。
この方法を試してみると、classpath confファイルにリソースディレクトリのクラスパスエントリが表示されます(例:cfg /)
Netbeansを使用しても同じ問題が発生しました。プロジェクトフォルダに移動し、プロパティファイルをコピーしました。 「ビルド」をクリックしてから「クラス」をクリックしたと思います。そのフォルダーにプロパティファイルを追加しました。これで私の問題は解決しました。
「Webページ」の下と「その他のソース/ ...」の下にあるため、間違ったリソースフォルダーにプロパティファイルを追加していないことを確認してください。それらは「その他のソース/ ...」の下にある必要がありました。
Eclipse(Mavenなし)を使用するため、.properties
ファイルを配置するために、Javaソースコードも含むsrc
フォルダーに.properties
ファイルを配置しますプロジェクトをビルドした後、classes
フォルダー。正常に動作します。この投稿を見てください: https://www.mkyong.com/jsf2/cant-find-bundle-for-base-name-xxx-locale-en_us/
これがお役に立てば幸いです。
問題は、faces-config.xmlファイルのresource-bunde> base-name属性がプロパティへの異なるパスを持っていることです。これはfirstcup Java EEチュートリアルで起こりました。その後、プロジェクトの作成時に別のパッケージ名を付けましたが、Glassfishは「firstcup.web」にあるプロパティフォルダーを見つけることができませんでした。
役に立てば幸いです。