是否可以使用spring向wicket页面注入一个值?
使用@Value
可以将值注入spring bean。
我知道@SpringBean
注释,但这只适用于bean。
我的解决方法是使用spring bean包装该值,然后将@SpringBean
注入到我的wicket页面。有更好的方法吗?
答案 0 :(得分:1)
我们使用getter& amp;我们的自定义子项WebApplication
中的setter。这个孩子是标准的Spring bean,并以spring的配置配置。
否则你必须创建一些“config”bean。
答案 1 :(得分:0)
您可以编写Wicket资源加载器来加载弹簧值,然后这些值将像常规的wicket消息一样被解析。相反,如果你需要在wicket类的主体内做一些业务逻辑,那么这可能是在视图层之外重构逻辑的机会。
这是资源加载器的样子:
public class SpringPropertiesResourceLoader
implements IStringResourceLoader
{
public SpringPropertiesResourceLoader()
{
}
@Override
public String loadStringResource(Class<?> clazz, String key, Locale locale, String style, String variation)
{
return loadStringResource(key);
}
@Override
public String loadStringResource(Component component, String key, Locale locale, String style, String variation)
{
return loadStringResource(key);
}
private String loadStringResource(String key)
{
try
{
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(WebPortalApplication.get().getServletContext());
ConfigurableBeanFactory beanFactory = (ConfigurableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
String rv = beanFactory.resolveEmbeddedValue("${" + key + "}");
return rv;
}
catch (IllegalArgumentException iae)
{
// no property with the name - move along
return null;
}
}
}
然后在init()
:
getResourceSettings().getStringResourceLoaders().add(new SpringPropertiesResourceLoader());