欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring-boot2整合sitemesh3加jsp 专业填坑, 让你少走弯路

程序员文章站 2022-04-19 21:33:15
...

之前项目使用的是sitemesh2.4.2 搞的走了好多弯路 好了开场白就不说了 

1. 依赖

        <dependency>
            <groupId>org.sitemesh</groupId>
            <artifactId>sitemesh</artifactId>
            <version>3.0.1</version>
        </dependency>

2. 建立以下4个类

package com.dance.admin.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.WebMvcConfigurer;

@Configuration
public class WebConfigure implements WebMvcConfigurer {

    @Bean
    public FilterRegistrationBean siteMeshFilter() {
        FilterRegistrationBean fitler = new FilterRegistrationBean();
        fitler.setFilter(new Meshsite3Filter());
        return fitler;
    }
}


package com.dance.admin.sitemesh;

import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;

/**
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 *
 * @developers LONGZHIQIANG
 * @createtime 2019-06-30 19:52.
 * @describe    sitemesh 自定义路径映射配置
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 */
public class Meshsite3Filter extends ConfigurableSiteMeshFilter {

    @Override
    protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
        builder.addDecoratorPath("/*", "/sitemesh/main")//拦截规则该路径会被转发
                .addExcludedPath("/static/**")                              //白名单
                .addTagRuleBundle(new Sitemesh3TagRuleBundle());       //自定义标签
    }
}


package com.dance.admin.sitemesh;

import org.sitemesh.SiteMeshContext;
import org.sitemesh.content.ContentProperty;
import org.sitemesh.content.tagrules.TagRuleBundle;
import org.sitemesh.content.tagrules.html.ExportTagToContentRule;
import org.sitemesh.tagprocessor.State;

/**
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 * @developers LONGZHIQIANG
 * @createtime 2019-06-30 20:05.
 * @describe    自定义标签 页面使用 <sitemesh:write property='content'/> 访问
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 */
public class Sitemesh3TagRuleBundle implements TagRuleBundle {

    public static String SITEMESH_TAG_CONTENT = "content";

    @Override
    public void install(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
        state.addRule(SITEMESH_TAG_CONTENT,
                new ExportTagToContentRule(siteMeshContext,contentProperty.getChild(SITEMESH_TAG_CONTENT),false));
    }

    @Override
    public void cleanUp(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
        if (!(contentProperty.getChild(SITEMESH_TAG_CONTENT)).hasValue()) {
            (contentProperty.getChild(SITEMESH_TAG_CONTENT)).setValue(contentProperty.getValue());
        }
    }
}


package com.dance.admin.sitemesh;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 *
 * @developers LONGZHIQIANG
 * @createtime 2019-06-30 19:55.
 * @describe    转发至 sitemesh视图
 * ☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆☆☆★☆☆☆☆
 */
@Controller
@RequestMapping("/sitemesh")
public class Sitemesh3Controller {

    @RequestMapping("/main")
    public String defaultDecorator() {

        return "/../form-views/main";
    }
}

3. 最后一步很坑 在网上找看100个播客 有99个都说到了后台代码怎么写 大该也就是我上面贴出的那样, 唯独他娘的没说到前台怎么用 以前用 sitemesh2.4.2的时候都是 

<%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>
​
<sitemesh:body/> 这样写 

​

 

记住3.0 是在需要被装饰的页面是要这样写

    <content>
        <h1>今天天气真好</h1>
    </content>

在装饰面是这样引入

<sitemesh:write property='content'/>

这样你的装饰页面就能将<content></content>标签内的内容全部拿过来

若不是自定义标签的话 直接这样写

​
<sitemesh:write property='title'/>
<sitemesh:write property='body'/>
<sitemesh:write property='hade'/>