• sitemesh 学习之 meta 引入


    在上篇笔记学习了sitemesh的基本用法,这里还有另一种用法

    在sitemesh.jar有一个默认的sitemesh-default文件 ,这个文件是可以指定的
    可以指定的文件名的sitemesh.xml文件,放在/WEB-INF目录下。如果没用,则默认读取sitemesh.jar文件中的sitemesh-default.xml文件。这个文件在jar:com.opensymphony.module.sitemesh.factory包中。
    在这个文件中可以指定使用那些mapper对象来装饰页面,也可以扩展自己的Mapper类。 sitemesh自带的mapper类放在com.opensymphony.module.sitemesh.mapper包中,可以供大家选择使用。

    sitemesh-default.xml的内容

    1. <sitemesh>
    2. <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
    3. <excludes file="${decorators-file}"/>
    4. <page-parsers>
    5. <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
    6. </page-parsers>
    7. <decorator-mappers>
    8. <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
    9. <param name="property.1" value="meta.decorator" />
    10. <param name="property.2" value="decorator" />
    11. </mapper>
    12. <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper"/>
    13. <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
    14. <param name="decorator" value="printable" />
    15. <param name="parameter.name" value="printable" />
    16. <param name="parameter.value" value="true" />
    17. </mapper>
    18. <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper"/>
    19. <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
    20. <param name="config" value="${decorators-file}" />
    21. </mapper>
    22. </decorator-mappers>
    23. </sitemesh>

    这里是今天学习备注的重点 ,com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper 这个类的使用。
     
    在sitemesh-default.xml中,可以看到已经声明了这个类,并且可以通过查阅API来获得其使用方法。
    在这个文件中可以看到配置了这个类的两个属性

    1. <param name="property.1" value="meta.decorator" />
    2. <param name="property.2" value="decorator" />

    通过查阅API可以找到,只要html文件中包含

    1. <meta name="decorator" content="decoratorname">
    2. <meta name="meta.decorator" content="decoratorname">

     就可以应用相应的装饰器,而不必在decorator.xml中使用<pattern>来规定哪些页面使用哪些装饰器。

    decorators.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <decorators defaultdir="/WEB-INF/views">
    3. <!-- 默认装饰页面, 在需要装饰的页面增加<meta name="decorator" content="default"/> -->
    4. <decorator name="blank" page="layouts/blank.jsp" />
    5. <decorator name="default" page="layouts/default.jsp" />
    6. <!-- CMS基础主题装饰页面 -->
    7. <decorator name="cms_default_basic" page="modules/cms/front/themes/basic/layouts/default.jsp" />
    8. <decorator name="cms_default_weixin" page="modules/cms/front/themes/weixin/layouts/default.jsp" />
    9. </decorators>


    装饰页面为blank

    某一个需要被装饰的页面不用<pattern>来拦截

    xxx.jsp 被装饰的页面
    1. <%@ page contentType="text/html;charset=UTF-8" %>
    2. <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
    3. <html>
    4. <head>
    5. <title>${fns:getConfig('productName')}</title>
    6. <meta name="decorator" content="blank"/><c:set var="tabmode" value="${empty cookie.tabmode.value ? '0' : cookie.tabmode.value}"/>
    7. <c:if test="${tabmode eq '1'}"><link rel="Stylesheet" href="${ctxStatic}/jerichotab/css/jquery.jerichotab.css" />
    8. <script type="text/javascript" src="${ctxStatic}/jerichotab/js/jquery.jerichotab.js"></script></c:if>
    9. <style type="text/css">
    10. #main {padding:0;margin:0;} #main .container-fluid{padding:0 4px 0 6px;}
    11. #header {margin:0 0 8px;position:static;} #header li {font-size:14px;_font-size:12px;}
    12. #header .brand {font-family:Helvetica, Georgia, Arial, sans-serif, 黑体;font-size:26px;padding-left:33px;}
    13. #footer {margin:8px 0 0 0;padding:3px 0 0 0;font-size:11px;text-align:center;border-top:2px solid #0663A2;}
    14. #footer, #footer a {color:#999;} #left{overflow-x:hidden;overflow-y:auto;} #left .collapse{position:static;}
    15. #userControl>li>a{/*color:#fff;*/text-shadow:none;} #userControl>li>a:hover, #user #userControl>li.open>a{background:transparent;}
    16. </style>


    看到只要头部引用了 <meta name="decorator" content="blank"/> 这个meta,就会自动去decorators.xml 找 decorator name为meta指定的进行装饰操作 ,这个方法跟用<pattern>用起来都很方便,只是使用meta控制的粒度更细


    一点联想:
     
       在com.opensymphony.module.sitemesh.mapper包中我看到了一个叫CookieDecoratorMapper的类,话说可以在用户的cookie中指定装饰器的名字。
     
    这样我们可以通过扩展来实现基于用于的个人喜好设定,用户可以自己选择需要应用的装饰器(有点类似QQ空间选择个性主页模板),把装饰器的的名称存放起来,当浏览页面的时候自动去读取这个值以实现主页风格的动态切换。只是有个这个想法,没有实践




  • 相关阅读:
    Solidity通过合约转ERC20代币
    各种开源协议区别
    shell脚本之函数
    shell脚本之循环和循环控制
    shell脚本之if判断以及case多分支选择
    shell脚本之数组
    shell脚本之变量
    nginx常用内置变量
    nignx配置文件详解
    nginx源码安装./configure常见参数详解
  • 原文地址:https://www.cnblogs.com/signheart/p/b6fbf190b561c1629d8fbc906161dc20.html
Copyright © 2020-2023  润新知