如何使用数据库中的值设置 InternalResourceViewResolver 前缀?
How to set InternalResourceViewResolver prefix with value from database?
我有一个基于 Spring MVC 4 的 CMS,我希望用户从不同的视觉主题中进行选择。它们存储在单独的文件夹中。
目前,主题名称在 Properties.THEME_NAME 中被硬编码,但我想将值存储在数据库中并作为 InternalResourceViewResolver 的前缀部分加载。因此用户可以更改它并切换到另一个主题。当应用程序为 运行 时,是否可以动态地进行此更改?
我的配置代码:
@EnableWebMvc
@Configuration
@ComponentScan({ "shop.main.*" })
@Import({ SecurityConfig.class })
@PropertySource("classpath:application.properties")
public class AppContextConfig extends WebMvcConfigurerAdapter {
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/pages/" + Properties.THEME_NAME + "/");
resolver.setSuffix(".jsp");
return resolver;
}
// other methods
}
实现我的目标的一种方法是扩展 InternalResourceViewResolver 并将 getter 方法覆盖为动态加载 return 前缀。
所以配置更改为:
@Bean
public ThemedResourceViewResolver internalResourceViewResolver() {
ThemedResourceViewResolver resolver = new ThemedResourceViewResolver();
resolver.setSuffix(".jsp");
return resolver;
}
和自定义解析器 class:
public class ThemedResourceViewResolver extends InternalResourceViewResolver {
@Autowired
private SitePropertyDAO sitePropertyDAO;
protected String getPrefix() {
String prefix = "/pages/" + Properties.THEME_NAME + "/";
SiteProperty property = sitePropertyDAO.findOneByName(Constants.THEME);
if (property != null) {
prefix = "/pages/" + property.getContent() + "/";
}
return prefix;
}
}
我使用这种方法是因为我不仅需要更改 CSS 文件路径或属性,还需要更改存储我的 .jsp 视图的文件夹,因此不同的主题具有不同的布局。
我有一个基于 Spring MVC 4 的 CMS,我希望用户从不同的视觉主题中进行选择。它们存储在单独的文件夹中。
目前,主题名称在 Properties.THEME_NAME 中被硬编码,但我想将值存储在数据库中并作为 InternalResourceViewResolver 的前缀部分加载。因此用户可以更改它并切换到另一个主题。当应用程序为 运行 时,是否可以动态地进行此更改?
我的配置代码:
@EnableWebMvc
@Configuration
@ComponentScan({ "shop.main.*" })
@Import({ SecurityConfig.class })
@PropertySource("classpath:application.properties")
public class AppContextConfig extends WebMvcConfigurerAdapter {
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/pages/" + Properties.THEME_NAME + "/");
resolver.setSuffix(".jsp");
return resolver;
}
// other methods
}
实现我的目标的一种方法是扩展 InternalResourceViewResolver 并将 getter 方法覆盖为动态加载 return 前缀。 所以配置更改为:
@Bean
public ThemedResourceViewResolver internalResourceViewResolver() {
ThemedResourceViewResolver resolver = new ThemedResourceViewResolver();
resolver.setSuffix(".jsp");
return resolver;
}
和自定义解析器 class:
public class ThemedResourceViewResolver extends InternalResourceViewResolver {
@Autowired
private SitePropertyDAO sitePropertyDAO;
protected String getPrefix() {
String prefix = "/pages/" + Properties.THEME_NAME + "/";
SiteProperty property = sitePropertyDAO.findOneByName(Constants.THEME);
if (property != null) {
prefix = "/pages/" + property.getContent() + "/";
}
return prefix;
}
}
我使用这种方法是因为我不仅需要更改 CSS 文件路径或属性,还需要更改存储我的 .jsp 视图的文件夹,因此不同的主题具有不同的布局。