-
需求:为所有的页面定义一个通用的头部和底部(例如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都是一样的
网友评论