在不同的 properties 配置文件中引入不同的样式,但是样式定义的 key 都是 index.body,这样方便后期在页面中引入。
接下来在 SpringMVC 容器中配置三个 Bean,如下:
- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
- <property name="paramName" value="theme"/>
- </bean>
- </mvc:interceptor>
- </mvc:interceptors>
- <bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
- <property name="basenamePrefix" value="theme."/>
- </bean>
- <bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
- <property name="defaultThemeName" value="blue"/>
- </bean>
首先配置拦截器 ThemeChangeInterceptor,这个拦截器用来解析主题参数,参数的 key 为 theme,例如请求地址是 /index?theme=blue,该拦截器就会自动设置系统主题为 blue。当然也可以不配置拦截器,如果不配置的话,就可以单独提供一个修改主题的接口,然后手动修改主题,类似下面这样:
- @Autowired
- private ThemeResolver themeResolver;
- @RequestMapping(path = "/01/{theme}",method = RequestMethod.GET)
- public String theme1(@PathVariable("theme") String themeStr, HttpServletRequest request, HttpServletResponse response){
- themeResolver.setThemeName(request,response, themeStr);
- return "redirect:/01";
- }
themeStr 就是新的主题名称,将其配置给 themeResolver 即可。
接下来配置 ResourceBundleThemeSource,这个 Bean 主要是为了加载主题文件,需要配置一个 basenamePrefix 属性,如果我们的主题文件放在文件夹中,这个 basenamePrefix 的值就是 文件夹名称.。
接下来配置主题解析器,主题解析器有三种,分别是 CookieThemeResolver、FixedThemeResolver、SessionThemeResolver,这里我们使用的是 SessionThemeResolver,主题信息将被保存在 Session 中,只要 Session 不变,主题就一直有效。这三个主题解析器松哥会在下一小节中和大家仔细分析。