2

私の現在のプロジェクトでは、テキスト送信者がプロパティ ファイルのアップロードを介して改札メッセージ/国際化を管理する方法を実装する必要があります。

この質問も参照してください:国際化された改札アプリケーションの管理

そこで提案されているように、カスタムIStringResourceLoaderを実装し、それを StringResourceLoader リストの先頭に追加して、既に配置されているプロパティをオーバーライドしました。

getResourceSettings().getStringResourceLoaders().add(0, new CustomStringResourceLoader()); 

ただし、更新が発生する可能性があり、実行時にロードする必要があるため、これでは十分ではありません。StringResources は wicket によってキャッシュされ、ResourceWatcherがトリガーされたときにのみ更新されます。

Wicket が文字列リソースをウォッチャーに追加する場所を見つけました:PropertiesFactory設定内です。ウォッチャーにリソースを追加する方法はaddToWatcher(...). ただし、このメソッドは保護されており、セットアップ全体は、これが本番用ではなく開発目的で使用されることを示唆しています。

PropertiesFactoryカスタムバージョンを拡張して効果的に作成し、設定に追加することで、この方法を使用することができました。

getResourceSettings().setPropertiesFactory(new CustomPropertiesFactory(getResourceSettings()));
getResourceSettings().setResourcePollFrequency(Duration.seconds(1));

私の質問は次のとおりです。これは非常に迂遠な解決策だと思います。プロパティファイルの変更を監視する別の方法はありますか?

4

1 に答える 1

0

問題に対する私の解決策:

getResourceSettings().getStringResourceLoaders().add(0, new CustomResourceLoader());
getResourceSettings().getResourceFinders().add(new Path("/pathToResources"));
getResourceSettings().setResourcePollFrequency(Duration.seconds(1));

これにより、リストの先頭に my が挿入CustomResourceLoaderされるため、最初にすべてのプロパティがチェックされます。

追加された は、ウィケットの外にある任意のディレクトリでリソースを探すようにPath指示します。PropertiesFactory

リソース ファイルにもカスタム名が必要でしたCustomResourceLoader

public String loadStringResource(final Class<?> clazz, final String key, final Locale locale, final String style, final String variation) {
    final String myResourceFilename = createCustomResourceFileName(locale); 
    final IPropertiesFactory pF = Application.get().getResourceSettings().getPropertiesFactory();
    final org.apache.wicket.resource.Properties props = pF.load(clazz, myResourceFilename);
    ...
}

を使用しPropertiesFactoryてファイルをロードすると、自動的に内部に追加されIModificationWatcherます。

問題の一部は、リソース ファイルが非標準のエンコーディングであることが判明しました。これは、設定で特別なものIPropertyLoaderを追加することで修正できます。PropertiesFactory

((PropertiesFactory) getResourceSettings().getPropertiesFactory()).getPropertiesLoaders().add(0,
            new UtfPropertiesFilePropertiesLoader("properties", "your-favorite-encoding"));
于 2013-10-09T14:50:41.337 に答える