2014-10-07 10 views
6

Ist es möglich, einen Wert auf einer Wicket-Seite mithilfe der Feder einzugeben?Wie injiziert man Werte auf eine Wicket-Seite mit Feder?

Mit @Value ist es möglich, Werte zu einer Frühlingsbohne zu injizieren.

Ich kenne die @SpringBean Annotation, aber das ist nur für Bohnen.

Meine Problemumgehung ist, den Wert mit einer Frühlingsbohne zu wickeln und dann diese mit @SpringBean auf meine Wicket-Seite zu injizieren. Gibt es einen besseren Weg, dies zu tun?

+0

Ja, Sie können @Value verwenden, um Werte zu injizieren. – RishikeshDhokare

+0

@CodeFreak: Ja, in Frühlingsbohnen zu injizieren, aber nicht in eine Wicket-Seite, wie ich gefragt habe. – Cengiz

Antwort

1

Wir gelöst haben dieses Problem mit Getter & Setter in unserem eigenen Kind von WebApplication . Dieses Kind ist eine Standard-Frühlingsbohne und ist in der Frühlingskonfiguration konfiguriert.

Andernfalls müssen Sie einige "Config" -Bohnen erstellen.

0

Sie können einen Wicket-Ressourcenlader schreiben, um Federwerte zu laden, und dann werden diese Werte wie normale Wicket-Nachrichten aufgelöst. Wenn Sie es stattdessen im Körper der Wicket-Klasse benötigen, um eine Geschäftslogik zu erstellen, ist dies möglicherweise eine Gelegenheit, diese Logik außerhalb der Ansichtsebene zu refaktorieren.

Hier ist, was die Ressource-Lade wie folgt aussieht:

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; 
     } 
    } 

} 

Dann fügen Sie das für Ihre Anwendung in init():

getResourceSettings().getStringResourceLoaders().add(new SpringPropertiesResourceLoader()); 
Verwandte Themen