カスタムタグへの呼び出しを含む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ノウハウだけが私を失望させなかった場合、実現したいと考えています。誰かが私がより良い理解を得るのを助けることができます!
私は何をしていますか?
ありがとうございました。 'LocaleSupport'は非常に便利です。私はそれを試してみましょう。その間、私は 'MessageSupport'タグのソースを見て、バンドルタグが指定されていないとき(' BundleSupport'クラスの祖先を探して 'LocalizationContext'を取得したとき)に何が行われたかを調べました。この作業を行うには、LocalizationContextがリクエストスコープではなくページスコープ内にあるようにする必要もありました(これは私のアプリケーションでは妥当と思われます)。 –