spring in action 4 6.3使用Apache Tiles

配置Tiles視圖解析器html

須要一個TilesConfigurer bean,該bean用於定位和加載tile定義,還須要一個TilesViewResolver用於將邏輯視圖名與tile定義映射起來.在WebConfig.java中前端

@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses={AutoScan.class})
public class WebConfig extends WebMvcConfigurerAdapter {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
	//第6章內容 6.3
	@Bean
	public TilesConfigurer tilesConfigurer() {
		TilesConfigurer tiles = new TilesConfigurer();
		tiles.setDefinitions(new String[] { "/WEB-INF/layout/tiles.xml", "/WEB-INF/views/**/tiles.xml" });
		tiles.setCheckRefresh(true);
		return tiles;
	}

	//第6章內容 6.3
	@Bean
	public ViewResolver viewResolver() {
		return new TilesViewResolver();
	}
}

如今的apache Tiles有兩個版本 2.0和3.0,上面用的3.0.二者有什麼區別呢.其實也沒什麼區別,就是用的包名不同.兩個版本都須要一個TilesConfigurer beanTilesViewResolver bean.引用的時候,2.0用的是org.springframework.web.servlet.view.tiles2,而3.0用的是org.springframework.web.servlet.view.tiles3.
java

在配置TilesConfigurer bean時,最重要的是屬性definitions的定義.該屬性持有一個字符串數組,數組中的每一個元素都指定了tile-definition XML文件,在上面的配置中咱們使用的是
web

tiles.setDefinitions(new String[] { "/WEB-INF/layout/tiles.xml", "/WEB-INF/views/**/tiles.xml" });

這表示除了使用/WEB-INF/layout/tiles.xml以外,還會遞歸查詢/WEB-INF/views/文件夾及其子文件夾內全部名爲tiles.xml的文件,而後使用它們.spring

上面配置了TilesConfigurer/TilesViewResolver,用的是java配置,與之等同的xml配置以下所示
apache

<bean id="tilesConfigurer"
	class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	<property name="definitions">
		<list>
			<value>/WEB-INF/layout/tiles.xml.xml</value>
			<value>/WEB-INF/views/**/tiles.xml</value>
		</list>
	</property>
</bean>
<bean id="viewResolver"	class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" />

下面來介紹該框架最核心的文件tiles.xml.數組

tiles.xml文件長這樣.裏面定義了邏輯視圖名與物理視圖文件的映射,從下面的內容中還能發現,全部的definition都extends了base,而base加載了一個header和一個footer,因此extends base的definition都有同樣的header和footer.服務器

<?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>

在上面的tiles.xml文件中,一個definition就是一個tile,每個tile就是一個邏輯視圖與物理視圖文件映射.框架

書中還有對page.jsp 的描述,講了怎麼tile如何定義佈局,怎麼加載footer,body,header等等.涉及到了前端的東西,看了頭大.jsp

代碼結構

wKioL1gv9nvg0IeTAAH21aVgPRQ274.png

第一次啓動時報錯

wKioL1gv833hUaKNAAJbgSU-R0Q199.png

由於沒有引入tile的包,在build.gradle中加入下面的內容後,refresh gradle便可

	compile ("org.apache.tiles:tiles-core:$tilesVersion") {
		exclude group: 'org.slf4j'
	}
	compile ("org.apache.tiles:tiles-jsp:$tilesVersion") {
		exclude group: 'org.slf4j'
	}

再次重啓服務器

wKioL1gv9xiRdr_mAAEfYedPI7o063.png

這一版的spring in action就是spring in action4做者還算厚道,把相關的圖片都提供了.第3版的源代碼裏沒有,找了好久沒找到.固然估計是我檢索能力也差點.

本文中還有不少圖片是從源代碼裏拿出來的,版權歸原做者全部.路徑跟源代碼一致.無差.

我估計做者長這樣...不知道是否是真的..但願不是.LOL

wKioL1gv-jDQMF35AAAIegLZ8kU593.jpg

相關文章
相關標籤/搜索