2016-08-15 37 views
2

背景Java:実行時にデータベースからResourceBundleにプロパティを追加するにはどうすればよいですか?

私はMavenを使用してJava Webアプリケーションを開発しています。私はこのパスにResourceBundlesを作成しました。src/main/resources/i18n/LanguageBundle_xx_XX.propertiesです。

すべてが完璧に動作し、フロントエンドですべての作業を行っています(JSTLを使用)。

通報

次いで、ユーザは形式でMySQLデータベースに格納されているフロントエンドから、キー/値のペアを作成することができる:KEY | VALUE

ユーザーに最初のjspページを表示する前に、すべての設定を行う初期化サーブレットがあります。

この初期化サーブレットでは、データベースからすべてのKEY/VALUEペアを取得していますが、最初にjspページが表示されたときに翻訳が準備できるように、それらをLanguageBundleに追加します。

私がこれまで試した:

  1. はDB
  2. 反復処理からすべてのキー/値のペアを返すKEYが
  3. LanguageBundle_xx_XXに存在しない場合の値は
  4. を返さKEY/VALUEをproperty.put( "KEY"、 "VALUE")で追加します。

これでそのプロパティが追加されますが、そのスコープ外の特定のプロパティ(たとえば、他のサーブレット、jsp)にアクセスしようとすると、特定の.propertiesファイルに存在しないため失敗します。

この問題を解決するにはどうすればよいですか?

+0

これまでに作成したものは、ResourceBundleではなくプロパティファイルです。 * Object *であるResourceBundleを作成するさまざまな方法を調べる必要があります。 – EJP

+0

私は@EJPのアイデアにはメリットがあると感じます。私は同じだった。問題はプロパティファイルではなく、問題はファイルからだけでなくデータベースからも読み取れるようにresourcebundleを作成することです。 http://stackoverflow.com/questions/2451049/do-resource-bundles-in-java-support-runtime-string-substitutionを参照してください。 –

答えて

1

UPDATE:

私の作品解決策が出ています。

Properties prop = new Properties(); 
    InputStream in = getClass().getResourceAsStream("/i18n/LanguageBundle_en_US.properties"); 
    prop.load(in); 
prop.setProperty("KEY", "VALUE"); 
in.close(); 
prop.store(new FileOutputStream(getClass().getClassLoader().getResource("/i18n/LanguageBundle_en_US.properties").getFile()), null); 

これは悪い習慣であるのか、それともうまく使えるのですか?

ありがとうございます。

+0

リソースはファイルではなく、読み取り専用にすることができます。 – EJP

+0

次回に悪い可能性のある既存のファイルを上書きしています。私はあなたがメモリ内の値を変更する方法を見つけることを試みるべきだと思います。 – pmcevoy12

+0

私に戻ってくれてありがとう。私は実際のものを上書きします。しかし、それはターゲットフォルダ内でのみ発生します。それらのKEY | VALUEのペアは、最後に追加されたプロパティだけです。私はあなたの心配を見ることができます。私はそれを今のところ仕事にしておき、後の段階でそれに戻ります。私がより良い解決策を考え出すなら、私は答えを更新します。良い一日を。 – RasmusF

関連する問題