chapter06_渲染Web视图_3_使用Apache Tiles视图定义布局

  • 需求:为所有的页面定义一个通用的头部和底部(例如copyright)

    方法:使用布局引擎Apache Tiles,Spring提供视图解析器TilesViewResolver用于支持Apache Tiles

  • 配置Tiles视图解析器

    (1) 需要添加几个Bean

    示例

    WebConfig.java

      @Configuration
      @EnableWebMvc
      @ComponentScan("spittr.web")
      public class WebConfig extends WebMvcConfigurerAdapter {
    
          ...
    
          // Tiles
          @Bean
          public TilesConfigurer tilesConfigurer() {
    
              TilesConfigurer tiles = new TilesConfigurer();
    
              // tiles.setDefinitions(new String"/WEB-INF/layout/tiles.xml");
              tiles.setDefinitions("/WEB-INF/**/tiles.xml");
    
              tiles.setCheckRefresh(true);
      
              return tiles;
          }
    
          @Bean
          public ViewResolver viewResolver() {
    
              return new TilesViewResolver();
          }
    
          ...
      }
    

    设置TilesViewResolver很简单;设置TilesConfigurer最重要的是 setDifinitions方法,用于查找tiles.xml,可以使用通配符,"/WEB-INF//tiles.xml"代表查找WEB-INF目录下所有名字为tiles.xml的文件

    (2) xml配置详见 P186

  • tiles.xml

    (1) 示例

      <?xml version="1.0" encoding="ISO-8859-1" ?>
      <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
    
      <tiles-definitions>
    
          <definition name="base" template="/WEB-INF/layout/page.jsp">
              <put-attribute name="header" value="/WEB-INF/layout/header.jsp" />
              <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />
          </definition>
    
          <definition name="home" extends="base">
              <put-attribute name="body" value="/WEB-INF/views/home.jsp" />
          </definition>
    
          <definition name="registerForm" extends="base">
              <put-attribute name="body" value="/WEB-INF/views/registerForm.jsp" />
          </definition>
    
          <definition name="profile" extends="base">
              <put-attribute name="body" value="/WEB-INF/views/profile.jsp" />
          </definition>
    
          <definition name="spittles" extends="base">
              <put-attribute name="body" value="/WEB-INF/views/spittles.jsp" />
          </definition>
    
          <definition name="spittle" extends="base">
              <put-attribute name="body" value="/WEB-INF/views/spittle.jsp" />
          </definition>
    
      </tiles-definitions>
    

    (2) 每个<definition>定义一个tile,指向一个JSP模板;里面的<put-attribute>元素和JSP文件的<t:insertAttribute name="xxx"/>的name属性对应

    (3) 在示例中,除了base以外,其余的JSP模板都extends于base

    (4) page.jsp

      <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
      <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="t" %>
      <%@ page session="false" %>
    
      <html>
          <head>
              <title>Spittr</title>
              <link rel="stylesheet" type="text/css" href="<s:url value="/resources/style.css"/>" >
          </head>
          <body>
              <div id="header">
                  <t:insertAttribute name="header"/>
              </div>
       
              <div id="content">
                  <t:insertAttribute name="body"/>
              </div>
      
              <div id="footer">
                  <t:insertAttribute name="footer"/>
              </div>
          </body>
      </html>
    

    (5) body 部分由各个模板自己设置,所有的模板都继承于base,所以他们的header和footer都是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值