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());
Ja, Sie können @Value verwenden, um Werte zu injizieren. – RishikeshDhokare
@CodeFreak: Ja, in Frühlingsbohnen zu injizieren, aber nicht in eine Wicket-Seite, wie ich gefragt habe. – Cengiz