2011-12-06 7 views
3

カスタムタグへの呼び出しを含むJSP 2.0ファイルがあります。このタグでは、ページ上で現在どのバンドルが使用されているかを知る必要があるため、いくつかのリソースを検索できます。カスタムタグはJavaで記述されています。バンドルは、カスタムタグがオンに使用されますが、リソースのキーは常に同じになりますので、私はこれを指定するには、既存のfmt:bundleタグを使用していた、例えばどのページ応じて変更することができます。JSPカスタムタグ内からコンテキスト内のバンドルを読み取るにはどうすればよいですか?

<fmt:bundle basename="myBundle"> 
    <custom:tag title="text.title"/> 
</fmt:bundle> 

私がしてきましたfmt:bundleタグは内部タグから読み取ることができます(または他の方法でその環境を提供します)。カスタムタグは上記の例にあります(これはfmt:messageタグとやりとりするのと同じ方法ですが、 fmt:bundleがカスタムタグを定義するJava内から推測していると思われるLocalizationContextにアクセスする方法を理解することができます。

私は

LocalizationContext lc = (LocalizationContext)Config.get(
     pageContext.getRequest(),Config.FMT_LOCALIZATION_CONTEXT); 
ResourceBundle rb = lc.getResourceBundle(); 
String s =rb.getKey(title); 

を試してみたんだけど、それは(私はデフォルトのバンドルに至るまで低下したことを推測見るために適切な場所ではないであることを示しているようだ

java.util.MissingResourceException: Can't find resource for bundle 
    java.util.PropertyResourceBundle, key text.title 

を取得しますか? )。

バンドル名をカスタムタグに渡すことがあるかもしれませんが、貧弱なJSPノウハウだけが私を失望させなかった場合、実現したいと考えています。誰かが私がより良い理解を得るのを助けることができます!

私は何をしていますか?

答えて

2

JSTL仕様によれば、バンドルルックアップを実装するクラスLocaleSupportがあり、ローカライズされたメッセージを生成する必要があるタグハンドラの実装で使用されます。

+0

ありがとうございました。 'LocaleSupport'は非常に便利です。私はそれを試してみましょう。その間、私は 'MessageSupport'タグのソースを見て、バンドルタグが指定されていないとき(' BundleSupport'クラスの祖先を探して 'LocalizationContext'を取得したとき)に何が行われたかを調べました。この作業を行うには、LocalizationContextがリクエストスコープではなくページスコープ内にあるようにする必要もありました(これは私のアプリケーションでは妥当と思われます)。 –

関連する問題