zoukankan      html  css  js  c++  java
  • 笔记30 视图解析 ——TilesViewResolver

    Apache Tiles,定义适用于所有页面 的通用页面布局。Spring MVC以视图解析器的形式为Apache Tiles提 供了支持,这个视图解析器能够将逻辑视图名解析为Tile定义。 

    1.配置Tiles视图解析器

    为了在Spring中使用Tiles,需要配置几个bean。一 个TilesConfigurer bean,它会负责定位和加载Tile定义并协调生 成Tiles。除此之外,还需要TilesViewResolver bean将逻辑视图 名称解析为Tile定义。 这两个组件又有两种形式:针对Apache Tiles 2和Apache Tiles 3分别都 有这么两个组件。

    这两组Tiles组件之间最为明显的区别在于包名。针 对Apache Tiles 2的TilesConfigurer/TilesViewResolver位于 org.springframework.web.servlet.view.tiles2包中,而 针对Tiles 3的组件位于 org.springframework.web.servlet.view.tiles3包中。

    使用Tiles 3。 

    配置TilesConfigurer来解析定义

    1 @Bean
    2     public TilesConfigurer tilesConfigurer() {
    3         TilesConfigurer tiles = new TilesConfigurer();
    4         // 指定Tile定义的位置
    5         tiles.setDefinitions(new String[] { "/WEB-INF/layout/tiles.xml", "/WEB-INF/views/**/tiles.xml" });
    6         tiles.setCheckRefresh(true); // 启用刷新功能
    7         return tiles;
    8     }

    当配置TilesConfigurer的时候,所要设置的最重要的属性就 是definitions。这个属性接受一个String类型的数组,其中每 个条目都指定一个Tile定义的XML文件。对于Spittr应用来讲,我们让 它在“/WEB-INF/layout/”目录下查找tiles.xml。

    配置TilesViewResolver

    1 @Bean
    2     public ViewResolver viewResolver() {
    3         return new TilesViewResolver();
    4     }

    2.定义Tiles

     Apache Tiles提供了一个文档类型定义(document type definition, DTD),用来在XML文件中指定Tile的定义。每个定义中需要包含一 个<definition>元素,这个元素会有一个或多个<putattribute>元素。例如,如下的XML文档为Spittr应用定义了几个Tile。

    tiles.xml

     1 <?xml version="1.0" encoding="ISO-8859-1" ?>
     2 <!DOCTYPE tiles-definitions PUBLIC
     3        "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
     4        "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
     5 <tiles-definitions>
     6 
     7   <definition name="base" template="/WEB-INF/layout/page.jsp">
     8     <put-attribute name="header" value="/WEB-INF/layout/header.jsp" />
     9     <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />
    10 
    11   </definition>
    12 
    13   <definition name="home" extends="base">
    14     <put-attribute name="body" value="/WEB-INF/views/home.jsp" />
    15   </definition>
    16 
    17   <definition name="login" extends="base">
    18     <put-attribute name="body" value="/WEB-INF/views/login.jsp" />
    19   </definition>
    20   
    21   <definition name="registerForm2" extends="base">
    22     <put-attribute name="body" value="/WEB-INF/views/registerForm2.jsp" />
    23   </definition>
    24 
    25   <definition name="profile" extends="base">
    26     <put-attribute name="body" value="/WEB-INF/views/profile.jsp" />
    27   </definition>
    28 
    29   <definition name="spittles" extends="base">
    30     <put-attribute name="body" value="/WEB-INF/views/spittles.jsp" />
    31   </definition>
    32 
    33   <definition name="spittle" extends="base">
    34     <put-attribute name="body" value="/WEB-INF/views/spittle.jsp" />
    35   </definition>
    36 
    37 </tiles-definitions>

    每个<definition>元素都定义了一个Tile,它最终引用的是一个 JSP模板。在名为base的Tile中,模板引用的是“/WEBINF/layout/page.jsp”。某个Tile可能还会引用其他的JSP模板,使这些 JSP模板嵌入到主模板中。对于base Tile来讲,它引用的是一个头部 JSP模板和一个底部JSP模板。 

    1   <definition name="base" template="/WEB-INF/layout/page.jsp">
    2     <put-attribute name="header" value="/WEB-INF/layout/header.jsp" />
    3     <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />
    4 
    5   </definition>

    base Tile所引用的page.jsp模板如下面程序清单所示。 

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     2 <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
     3 <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="t" %>
     4 <%@ page session="false" %>
     5 <html>
     6   <head>
     7     <title>Spittr</title>
     8     <link rel="stylesheet" 
     9           type="text/css" 
    10           href="<s:url value="/resources/style.css" />" >
    11           
    12   </head>
    13   <body>
    14     <div id="header">
    15       <t:insertAttribute name="header"></t:insertAttribute>
    16     </div>
    17     <div id="content">
    18       <t:insertAttribute name="body" >
    19           
    20       </t:insertAttribute>
    21     </div>
    22     <div id="footer">
    23       <t:insertAttribute name="footer" ></t:insertAttribute>
    24     </div>
    25   </body>
    26 </html>

    需要重点关注的事情就是如何使用Tile标签库中的 <t:insert Attribute> JSP标签来插入其他的模板。在这里,用 它来插入名为header、body和footer的模板。

    在base Tile定义中,header和footer属性分别被设置为引用“/WEBINF/layout/ header. jsp”和“/WEB-INF/layout/footer.jsp”

    header.jsp

    1 <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
    2 
    3 <a href="<s:url value="/home" />"><img 
    4     src="<s:url value="/resources" />/images/spitter_logo_50.png" 
    5     border="0"/></a>

    footer.jsp

    1 Copyright &copy; YuanJun Li

    需要注意的是,将通用的元素放到了page.jsp、header.jsp以及footer.jsp 中,其他的Tile模板中不再包含这部分内容。这使得它们能够跨页面 重用,这些元素的维护也得以简化。

    效果截图:

      

  • 相关阅读:
    Session cookie 原理
    asp.net core service mesh
    js 常用库
    asp.net core consul
    asp.net core polly
    asp.net core ocelot
    第十五章 享元模式 Flyweight
    第十四章 策略模式 Strategy
    mysql 主从复制
    mysql 执行计划
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/8964852.html
Copyright © 2011-2022 走看看