簡述:
項(xiàng)目中可能會遇到多個(gè)html艇搀,其中頂部頭部或者資源文件引用都相同的情況等,為了簡潔項(xiàng)目結(jié)構(gòu)缴挖,凈化頁面,采用了本方案來解決忆嗜,如下:
1. pom文件添加相關(guān)依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>general-manager</groupId>
<artifactId>general-manager-web</artifactId>
<version>1.0-SNAPSHOT</version>
<!--springboot 基本配置構(gòu)建 start -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<!--spring boot-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--sitemesh模版裝飾-->
<dependency>
<groupId>org.sitemesh</groupId>
<artifactId>sitemesh</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 熱部署依賴 start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency><!---->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 這個(gè)需要為 true 熱部署才有效 -->
</dependency>
</dependencies>
<build>
<finalName>general-manager-web</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>java</executable>
<arguments>
<argument>com.py.general.App</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. 創(chuàng)建sitemesh目錄存放sitemesh相關(guān)配置
DecoratorController
package com.py.general.web.sitemesh;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* Created by py
*/
@Controller
@RequestMapping(value = "/decorator")
public class DecoratorController {
private static final Logger logger = LoggerFactory.getLogger(DecoratorController.class);
@RequestMapping(value = "/index")
public ModelAndView index(ModelMap modelMap) {
return new ModelAndView("decorators/index");
}
}
WebConfig
package com.py.general.web.sitemesh;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Created by py
*/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public FilterRegistrationBean siteMeshFilter() {
FilterRegistrationBean fitler = new FilterRegistrationBean();
WebSiteMeshFilter siteMeshFilter = new WebSiteMeshFilter();
fitler.setFilter(siteMeshFilter);
return fitler;
}
}
WebSiteMeshFilter
package com.py.general.web.sitemesh;
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;
/**
* Created by py
*/
public class WebSiteMeshFilter extends ConfigurableSiteMeshFilter {
public static final String DECORATOR_URL="/decorator/index";
/**
* decoratorPath 第一個(gè)參數(shù)配置被模板裝飾的頁面 第二個(gè)參數(shù)為模板頁
* @param builder
*/
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
builder.addDecoratorPath("/", DECORATOR_URL)
.addDecoratorPath("/test", DECORATOR_URL)
.addExcludedPath("/test1")//不需要裝飾的路徑
.addExcludedPath(DECORATOR_URL);
}
}
3. application.yml
server:
port: 8001
spring:
freemarker:
cache: false
settings:
template_update_delay: 0
4.頁面文件處理,templates下創(chuàng)建修飾目錄
footer.ftl
footer.............................................
header.ftl
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>通用管理平臺|
</title>
<link rel="shortcut icon" href="/img/favicon.ico" />
<link href="/css/bootstrap.min.css" rel="stylesheet">
<#--根據(jù)自己模板所需要的木塊添加 css 只需包含在head標(biāo)簽即可-->
<sitemesh:write property='head'/>
</head>
index.ftl
<html xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
<#include "header.ftl">
<body id="test">
修飾頁面主題內(nèi)容
</br>
<sitemesh:write property='body'/>
<#include "footer.ftl">
</body>
</html>
test.ftl
<head>
<link href="/css/bootstrap.min.test.css" rel="stylesheet">
</head>
<body>
被修飾頁面主體內(nèi)容
</body>
testController.java
package com.py.general.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by py on 2017/11/29.
*/
@Controller
public class TestController {
@RequestMapping(value = "/test")
public String test(){
return "test1";
}
}
運(yùn)行結(jié)果: