Also see Localizer#clearCache() [1] When changing the theme use getApplication().getLocalizer().clearCache()
1. https://github.com/apache/wicket/blob/edcbd4e849378a5aba9ee2d5e4f954bce904af52/wicket-core/src/main/java/org/apache/wicket/Localizer.java#L90 Martin Grigorov Freelancer. Available for hire! Wicket Training and Consulting https://twitter.com/mtgrigorov On Thu, Jun 18, 2015 at 9:14 PM, Sven Meier <s...@meiers.net> wrote: > Hi, > > Wicket includes the session's style when generating the cache key*. Why > don't you use this to identify your current 'theme'? Then theme-specific > string resources should work out-of-the-box. > > Have fun > Sven > > *See Localizer#getCacheKey() > > > > On 18.06.2015 16:39, Tobias Gierke wrote: > >> Hi, >> >> I'm working on a 'themeable' (does this word exist ?) application were >> some string resources differ based on the currently active user's theme. >> Since (at least during development) each user can freely switch between >> different themes, I need Wicket to not cache these string resources. >> >> I implemented a custom IStringResourceLoader to locate the .properties >> file associated with the current user's UI theme but it seems Wicket is >> caching the String property values and only calls my IStringResourceLoader >> once for every String property. >> >> How can I disable this caching for my IStringResourceLoader ? I suspect >> Wicket thinks of .properties files as static resources so maybe I'm >> stretching the design a bit ;) >> >> Cheers, >> Tobias >> >> >> Currently my WicketApplication class looks like this: >> >> --->8------>8------>8------>8------>8------>8--- >> getResourceSettings().getStringResourceLoaders().add( new >> UIThemeStringResourceLoader() ); >> --->8------>8------>8------>8------>8------>8--- >> >> ...and the the IStringResourceLoader looks like this >> >> --->8------>8------>8------>8------>8------>8--- >> protected final class UIThemeStringResourceLoader implements >> IStringResourceLoader >> { >> // cache to avoid reloading properties over and over when not in >> debug mode >> private final Map<String,CacheEntry> properties = new >> HashMap<>(); // Key is UI theme name, value is properties file >> >> @Override >> public String loadStringResource(Class<?> clazz, String key, >> Locale locale, String style, String variation) >> { >> return loadStringResource( (Component) null , key , locale >> ,style , variation ); >> } >> >> @Override >> public String loadStringResource(Component component, String key, >> Locale locale, String style, String variation) >> { >> synchronized( properties ) >> { >> CacheEntry props = properties.get( getUITheme().getName() >> ); >> if ( props == null || ( isDebugModeEnabled() && >> props.isOlderThan( java.time.Duration.ofSeconds( 2 ) ) ) ) // discard stale >> properties when running in debug mode >> { >> final UserSession session = (UserSession) >> Session.get(); >> final Locale locale = session.isUserLoggedIn() ? >> session.getCurrentUser().getLocale() : >> applicationSettings.getDefaultLocale(); >> final String path = >> getUITheme().getStringPropertiesPath( locale ); >> >> try ( final InputStream stream = >> getServletContext().getResourceAsStream( path ) ) >> { >> if ( stream == null ) { >> return null; >> } >> >> final Properties tmp = new Properties(); >> tmp.load( stream ); >> >> props = new CacheEntry( tmp ); >> properties.put( getUITheme().getName() , props ); >> } >> catch (IOException e) { >> LOG.warn("getString(): Failed to load string >> properties for UI theme '"+getUITheme().getName()+"' from '"+path+"'",e); >> } >> } >> return props.properties.getProperty( key ); >> } >> } >> } >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >