1

これを行う必要があるのは少しファンキーなことだと思いますが、カスタム Velocity ツールから Spring messageSource Bean にアクセスしようとしています。

ほとんどのコードベースでは、メンバー変数を設定して次のようにロードするだけです。

@Resource(name = "messageSource")
private AbstractMessageSource _msgSource;

ただし、この状況では、これは Bean をロードしません。これは、Velocity ツールが通常の Bean ロードの発生を許可しない方法でインスタンス化されるためだと思います。または、アプリケーション スコープの Velocity ツールの Bean を初期化したくありません。

ツールは、toolbox.xml で次のように設定されます。

<tool>
    <key>calendarTool</key>
    <scope>application</scope>
    <class>...</class>
</tool>

これを行う方法または機能しない理由を説明するものをオンラインで見つけることができませんでした。

4

2 に答える 2

0

私が行ったのは、Velocity テンプレートをレンダリングするコードです。applicationContext.getBean("messageSource") を使用して applicationContext からメッセージ ソースを取得し、その MessageSource を VelocityContext に直接配置して、レンダリングに使用します。キー "messageSource" の下のテンプレート:

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("messageSource", applicationContext.getBean("messageSource"));

次に、メッセージキーをレンダリングしたいときはいつでも、たとえば HTML メールで、次のようになります。

<td>messageSource.getMessage("my.message.key", null, $locale)</td>

$locale は、VelocityContext にも手動で配置した java.util.Locale オブジェクトです。メッセージに引数が必要な場合は、コンテキストに配置したリスト ツールを使用して、通常はテンプレート内で作成する引数のリストから配列を取得します。補足として、org.springframework.ui.velocity.VelocityEngineUtils クラスのヘルパー メソッドを使用して、コントローラーまたは Webflow コードでの Velocity テンプレートのレンダリング、またはテンプレートをレンダリングするその他の場所でのレンダリングを支援できます。

于 2009-09-25T22:28:05.733 に答える
0

うまくいかない理由はわかりませんが、次のような注釈なしで取得しようとしましたか?

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
AbstractMessageSource _msgSource = (AbstractMessageSource )ctx.getBean("messageSource");
于 2009-09-25T22:18:35.237 に答える