美文网首页
chapter06_渲染Web视图_3_使用Apache Til

chapter06_渲染Web视图_3_使用Apache Til

作者: 米都都 | 来源:发表于2019-01-15 17:38 被阅读0次
    • 需求:为所有的页面定义一个通用的头部和底部(例如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都是一样的

    相关文章

      网友评论

          本文标题:chapter06_渲染Web视图_3_使用Apache Til

          本文链接:https://www.haomeiwen.com/subject/xunydqtx.html