在WEB开发中总时会遇到处理主题的问题,在系统运营中或许因为审美疲劳或者是提高用户体验度然后下系统需要增加一些主题样式,在遇到这些问题时我们都需要写大量代码来达到动态切换主题样式的目,而Spring MVC 提供了针对主题的解方案。
今天主要说下Spring MVC实现主题切换用到的解析器“ThemeResolver”和资源文件管理“ResourceBundleThemeSource”它们的配置方法和注意事项。
第一步:解析配置
其中解析器包括固定主题解析器“FixedThemeResolver” ,“会话主题解析SessionThemeResolver”和Cookie解析器“CookieThemeResolver”。Spring MVC提供的三个简单的主题解析器可以满足我们一般的需要,如果有特殊需求可以实现ThemeResolver接口自定义自己主题解析器。
如下是解析器继承与实现关系图
ThemeResolver (接口) AbstractThemeResolver (抽象类) FixedThemeResolver (继承AbastractThemeResolver间接的实现ThemeResolver接口) SessionThemeResolver(继承AbastractThemeResolver间接的实现ThemeResolver接口) CookieThemeResolver 直接实现(ThemeResolver接口)如下是三种解析器的配置
1. FixedThemeResolver 解析器的配置 defaultThemeName是配置默认主题,当不填写时默认主题的名称为"theme"
<bean id="themeResolver" class="org.springframework.web.servlet.theme.FixedThemeResolver"> <property name="defaultThemeName" value="blue"/> </bean>
2. SessionThemeResolver 解析器的配置 defaultThemeName是配置默认主题,当不填写时默认主题的名称为"theme"
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver"> <property name="defaultThemeName" value="blue"/> </bean>
3. CookieThemeResolver 解析器的配置 defaultThemeName是配置默认主题,当不填写时默认主题的名称为"theme"
<bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver"> <property name="defaultThemeName" value="blue"/> </bean>
如上三种配置中都对Bean id属性进行了配置,id属性的配置是必须配置项。
注意:
在配置主题解析器时“id”是必须填写,而且名字名称必须是“themeResolver”,如果不填写你会发现你配置的主题解析器无法生效,原因应该是Spring MVC中的Dispatri Servlet 中只允许配置一个ThemeResolver的实例,如果不填写解析器的名称那么Spring MVC无法唯一获得一个具体的解析器。
如下是Spring MVC初始化ThemeResolver解析器的方法,通过源码可以发现初始化方法是通过BeanName 和 Class两个参数来获取主题解析器。
其实其他的解析器如“MultipartResolver”,“LocaleResolver”在DispatcherServlet中也是只有一个实例所有在配置时也必须配置Bean Name属性。
/** * Initialize the ThemeResolver used by this class. * <p>If no bean is defined with the given name in the BeanFactory for this namespace, * we default to a FixedThemeResolver. */ private void initThemeResolver(ApplicationContext context) { try { this.themeResolver = context.getBean(THEME_RESOLVER_BEAN_NAME, ThemeResolver.class); if (logger.isDebugEnabled()) { logger.debug("Using ThemeResolver [" + this.themeResolver + "]"); } } catch (NoSuchBeanDefinitionException ex) { // We need to use the default. this.themeResolver = getDefaultStrategy(context, ThemeResolver.class); if (logger.isDebugEnabled()) { logger.debug( "Unable to locate ThemeResolver with name '" + THEME_RESOLVER_BEAN_NAME + "': using default [" + this.themeResolver + "]"); } } }第二步:主题资源文件配置
主题资源文件“ResourceBundleThemeSource”的配置也不麻烦,只需要配置两个参数分别是“basenamePrefix”和“parentThemeSource”其中“parentThemeSource是非必填属性”即可。
属性basenamePrefix是配置资源文件所存放的目录,其中“ResourceBundleThemeSource”在加载资源文件时默认是在classse目录加载。
例如如下配置程序将会在classse/theme目录下查找资源配置文件,资源文件名称后面必须要填写“.”。
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource"> <property name="basenamePrefix" value="theme."/> <property name="parentThemeSource" value=""/> </bean>当basenamePrefix="theme." 并且 themename=“blue”那么ResourceBundleThemeSource的basename就是“theme.blue”。
如果basename是“theme.blue”那么它将会对应“theme/blue.properties”资源文件。
总结
在Spring MVC主题管理中的两个组件“ThemeResolver”和“ResourceBundleThemeSource”配置不麻烦,但是需要注意的地方却有两个分别是:
1. 在配置"ThemeResolver"时BeanName是要必须配置的属性,并且名称必须是“themeResolver”;
2. 在配置“ResourceBundleThemeSource”时属性“basenamePrefix”的值是用于和Theme名称拼接并作为basename属性的值。
当出现如下错误时请检查解析器“ThemeResolver”是否配置“id”,然后在检查资源文件的目录是否正确。
javax.servlet.jsp.JspTagException: Theme 'theme': No message found under code 'core' for locale 'zh_CN'
相关推荐
nginx 通过 proxy_pass 和 upstream server 通信的时候需要手动指定 resolver。某些时候 DNS 解析失败就会出现这个错误: 代码如下: domain.com could not be resolved. 可以指定多个 DNS 并重置域名 TTL 延长 ...
5. **配置SAML属性**:根据需求,定义Shibboleth向服务提供者(SP)传递的用户属性,这通常在`attribute-resolver.xml`文件中完成。 6. **测试配置**:启动Shibboleth和CAS服务,通过测试客户端验证Shibboleth能否...
resolver-status.properties
《Ant Apache Resolver 1.6.5:构建与依赖管理利器》 Apache Ant是一个流行的Java构建工具,它基于XML来定义项目构建过程,是许多Java开发者进行自动化构建的首选工具。在Ant的世界里,"resolver"是解决项目依赖...
《Ant Apache Resolver 1.6.3:构建过程中的依赖管理利器》 在软件开发过程中,尤其是Java领域,构建工具起着至关重要的作用。Apache Ant是其中一款著名的自动化构建工具,它基于XML来定义任务,使得构建过程清晰、...
总的来说,React-Resolver是一个强大的工具,它简化了React应用中的数据管理和异步呈现,让开发者可以更专注于构建功能,而不是处理数据流的复杂性。通过合理利用这个库,你可以创建出响应速度快、用户体验优良的...
在JavaScript开发中,"ez-config-resolver"是一个用于处理配置解析的工具库,特别是对于具有复杂结构的应用程序,它能够帮助开发者有效地管理和解析配置文件。这个库的核心功能是解决配置的依赖关系,使得配置可以...
在使用`ant-apache-resolver-1.6.1.jar`时,开发者需要在Ant构建脚本中配置resolver任务。例如,你可以定义一个仓库(repository),指定项目依赖的存储位置,然后让resolver自动下载任何缺失的库。这极大地减少了...
resolver.jar
而`eslint-import-resolver-alias`是针对`eslint`的一个插件,专门用于处理模块导入时的路径解析问题,特别是涉及到项目中的别名配置。 首先,我们需要理解`import`语句在JavaScript模块化中的作用。ES6引入了`...
1. DNS.bpg、DNS.dsk:这些可能是Delphi的工程文件,用于存储项目的配置信息和开发环境的数据。 2. DNSResolver.dpr.lnk:这可能是一个快捷方式文件,指向DNSResolver项目的主入口点——DPR文件。 3. Bin:这个...
《Ant Apache Resolver 1.6.2:构建过程中的依赖管理利器》 Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程。在Java开发中,Ant被广泛用于自动化构建任务,如编译、打包、测试和部署。而Ant Apache ...
xml-resolver-1.2 xml-resolver-1.2
赠送jar包:netty-resolver-dns-4.1.73.Final.jar; 赠送原API文档:netty-resolver-dns-4.1.73.Final-javadoc.jar; 赠送源代码:netty-resolver-dns-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-...
而Apache Resolver则是Ant的一个关键模块,主要负责处理项目的依赖管理,确保在构建过程中所有必要的库和资源都能被正确地定位和引用。 **Apache Ant与Apache Resolver** Apache Ant是基于XML的构建工具,开发者...
通过`postcss-import-resolver`,开发者可以更好地管理和控制CSS导入,降低代码维护的难度,提升开发效率。同时,这个开源库也鼓励社区贡献,如果你有更高效的解决冲突策略,可以考虑对其进行改进并分享给其他人。
在Laravel框架中,"facade-resolver"是核心组件之一,它负责将开发者在代码中使用的外观(Facade)名称转换为对应的类实例。外观是一种轻量级的设计模式,为复杂的对象提供一个简单的接口,使得代码更加简洁易读。...
赠送jar包:netty-resolver-dns-4.1.65.Final.jar; 赠送原API文档:netty-resolver-dns-4.1.65.Final-javadoc.jar; 赠送源代码:netty-resolver-dns-4.1.65.Final-sources.jar; 赠送Maven依赖信息文件:netty-...
3. **实体管理**:XML Commons Resolver 实现了XML实体解析的功能,允许开发者处理包含外部实体引用的XML文档。它可以透明地处理这些引用,使得开发人员无需关心实体的实际位置和获取方式。 4. **缓存机制**:为了...