Spring MVC使用主题

Spring MVC通过使用一组静态资源(比如图像、样式等)提供了主题化支持。主题架构包含三个主要机制:支持主题的资源包、主题解析器和主题更改拦截器。

主题支持的资源包:是ThemeResource的实现,从类路径中加载属性文件。一个属性文件通过键/值对的形式列出了所有的主题资源。其中键是资源名称,而值是访问该资源的URI


style=css/light.css
style=css/dark.css

style是键值,css/dark or css/light是合适样式表的定位器路径

主题解析器:决定哪个主题被解析,以及哪个支持主题的资源包被应用程序所使用。为了初始化解析器,Dispatcher Servlet将在应用程序上下文中查找一个名为themeResolver的Spring Bean。如果该Bean不存在,则配置使用FixedThemeResolver

主题更改拦截器:拦截器负责拦截由控制器处理的HTTP请求。paramName属性是JSP中用来设置主题的键值

在配置文件中,三个机制的定义如下:

<!--定义主题解析器和主题更改拦截器-->
    <bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource"/>
    <bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
        <property name="defaultThemeName" value="dark"/>
    </bean>
    <mvc:interceptors>
        <bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
            <property name="paramName" value="theme"/>
        </bean>
    </mvc:interceptors>


实现的效果如图,当用户点击其中一个主题超链接时,主题名被设置为请求参数,并且触发执行ThemeChangeInterceptor,JSP代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title>Spring Theme</title>
    <link rel="stylesheet" href="<spring:theme code="style"/>" type="text/css"/>
</head>
<body>
Theme:
    <a href="?theme=light">Light</a> - <a href="?theme=dark">Dark</a>
    <br>
    <mvc:form modelAttribute="userTheme" action="resultTheme.mvc" method="post">
        <table>
            <tr>
                <td><mvc:label path="username">User Name</mvc:label></td>
                <td><mvc:input path="username" /></td>
                <td><mvc:errors path="username" /></td>
            </tr>
            <tr>
                <td><mvc:label path="email">E-Mail</mvc:label></td>
                <td><mvc:input path="email" /></td>
                <td><mvc:errors path="email" /></td>
            </tr>
            <tr>
                <td><mvc:label path="ccNumber">Credit Card Number</mvc:label></td>
                <td><mvc:input path="ccNumber" /></td>
                <td><mvc:errors path="ccNumber" /></td>
            </tr>
            <tr>
                <td><mvc:label path="password">Password</mvc:label></td>
                <td><mvc:password path="password" /></td>
                <td><mvc:errors path="password" /></td>
            </tr>
            <tr>
                <td colspan="3">
                    <input type="submit" value="Submit" />
                </td>
            </tr>
        </table>
    </mvc:form>
</body>
</html>

通过使用Spring标签库的theme标签,在a标签的href特性中将主题设置为HTML link标签。theme标签的code特性指定主题属性文件中定义的键值,在本例中该键值为style。

更改主题的另一个方法:

使用CookieThemeResolver类,该类在客户端搜索一个Cookie,如果存在,则设置主题。对于那些不需要管理会话以及行为无状态的应用程序来说,使用该解析器是可行的。

<bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值