2009-09-24 4 views
1

Je me rends compte que c'est quelque chose de légèrement funky à faire, mais j'essaie d'accéder à mon bean Spring sourceSource à partir d'un outil Velocity personnalisé.Comment charger/accéder à un bean (@Resource) dans un outil Velocity personnalisé

Dans la plupart de notre base de code, je peux simplement mettre en place une variable membre et le charger comme ceci:

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

Cependant, dans ce cas, cela ne se charge pas de la fève, je Je suppose que les outils Velocity sont instanciés d'une manière qui ne permet pas le chargement normal du bean. Ou il ne veut pas initialiser le bean pour une application étendue outil Velocity.

L'outil est mis en place dans le toolbox.xml comme suit:

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

Je n'ai pas pu trouver quoi que ce soit en ligne qui explique soit comment faire cela ou pourquoi il ne fonctionne pas.

Répondre

0

Ce que je l'ai fait est dans le code où je rends le modèle de vitesse, je récupère la source de message du applicationContext en utilisant applicationContext.getBean (« MessageSource »), puis je mets que MessageSource directement dans le VelocityContext que je l'utilise pour rendre mes modèles sous la clé « MessageSource »:

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

puis, à tout moment Je veux rendre un clé de message, par exemple dans un e-mail HTML, il ressemble à:

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

où $ locale est un objet java.util.Locale que j'ai aussi placé manuellement dans le VelocityContext. Si jamais j'ai besoin d'arguments pour le message, alors j'utilise l'outil de liste que j'ai mis dans le contexte pour obtenir un tableau de la liste d'arguments que je vais typiquement créer là dans le modèle. En guise de remarque, vous pouvez utiliser les méthodes d'assistance de la classe org.springframework.ui.velocity.VelocityEngineUtils pour vous aider à créer des modèles Velocity dans vos contrôleurs ou votre code de flux Web, ou partout où vous pourriez rendre des modèles.

0

Je ne sais pas pourquoi il ne fonctionne pas, mais avez-vous essayé de le récupérer sans annotations, quelque chose comme:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
AbstractMessageSource _msgSource = (AbstractMessageSource)ctx.getBean("messageSource"); 
Questions connexes