我已经构建了一个由客户端的angularJs和后端的spring MVC组成的应用程序。我的目的是将我的语言属性公开给客户端,以便我可以在我的JS文件中使用它们。为此,我使用了angular-translate.min.js库并按照说明操作: (https://gist.github.com/rvillars/6422287)。
基本上,我们的想法是创建一个从ReloadableResourceBundleMessageSource扩展的自定义类,并覆盖getAllProperties(Locale locale)方法。然后,在@controller中注入该自定义类,它将以Json格式的属性列表返回给客户端。 到目前为止,我的问题是我还没能在我的@controller中自动连接我的自定义类,扩展了ReloadableResourceBundleMessageSource。我的应用程序在部署阶段始终崩溃,并且#34;没有类型为CustomResourceBundleMessageSource&#34的合格bean。
我的环境: Spring MVC 3.2.3 Angular JS
请找到代码:
控制器类:
@Controller
@RequestMapping("/messageBundle")
public class SerializableMessageBundleController {
@Autowired
private CustomResourceBundleMessageSource messageSource;
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public Properties list(@RequestParam String lang) {
return messageSource.getAllProperties(new Locale(lang));
}
自定义消息来源:
public class CustomResourceBundleMessageSource extends ReloadableResourceBundleMessageSource {
public Properties getAllProperties(Locale locale) {
clearCacheIncludingAncestors();
PropertiesHolder propertiesHolder = getMergedProperties(locale);
Properties properties = propertiesHolder.getProperties();
return properties;
}
}
}
的applicationContext.xml:
<bean id="messageSource" class="com.contgo.CustomResourceBundleMessageSource">
<qualifier value="messageSource"/>
<property name="basename" value="LanguageResources"/>
</bean>
我也尝试添加@qualifier(&#34; messageSource&#34;),但不起作用。 还可以尝试@Resource和@Inject,也不会工作。
有没有人设法做到这一点?
答案 0 :(得分:0)
我遇到了同样的问题,最后得到了如下工作。 扩展ReloadableResourceBundleMessageSource的类是正确的。 您需要做的就是在applicationContext文件中正确配置它。
单独保留原始的ReloadableResourceBundleMessageSource配置:
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource">
<property name="basename" value="LanguageResources"/>
</bean>
然后使用&#39;父母&#39;添加以下内容。属性以引用原始配置:
<bean class="com.contgo.CustomResourceBundleMessageSource" id="myCustomMessageSource" parent="messageSource"/>
最后,在您的控制器中,您可以像这样自动装配它:
@Autowired
CustomResourceBundleMessageSource myCustomMessageSource;