如何使用spring将值注入wicket页面?

时间:2014-10-07 09:41:17

标签: spring wicket

是否可以使用spring向wicket页面注入一个值?

使用@Value可以将值注入spring bean。

我知道@SpringBean注释,但这只适用于bean。

我的解决方法是使用spring bean包装该值,然后将@SpringBean注入到我的wicket页面。有更好的方法吗?

2 个答案:

答案 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());