【问题标题】:How to inject values to a wicket page using spring?如何使用弹簧将值注入检票口页面?
【发布时间】:2014-10-07 09:41:16
【问题描述】:

是否可以使用 spring 向检票口页面注入值?

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

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

我的解决方法是使用 spring bean 包装该值,然后将其与 @SpringBean 注入我的检票口页面。有没有更好的方法来做到这一点?

【问题讨论】:

  • 是的,你可以使用@Value 来注入值。
  • @CodeFreak:是的,注入到 spring beans 中,但不是注入到检票口页面中,就像我问的那样。

标签: spring wicket


【解决方案1】:

我们已经在WebApplication 的自定义子代中使用getter 和setter 解决了这个问题。这个孩子是标准的 Spring bean,并在 spring 的配置中进行了配置。

否则你必须创建一些“配置”bean。

【讨论】:

    【解决方案2】:

    您可以编写一个 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());
    

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2012-07-04
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多