springboot+thymeleaf 实现 jsp 页面的自定义标签

摘抄别人的代码  搞了一下  springboot 版本   (v2.0.2.RELEASE)  


org.springframework.boot
spring-boot-starter-thymeleaf

//  这个 东西  要不要 也没啥用。 我也没搞明白   我把这段代码注销了



 先上代码, 



第一个 类  实现 AbstractProcessorDialect 接口 官方文档有写这是干什么的

https://www.thymeleaf.org/doc/tutorials/3.0/extendingthymeleaf.html#an-element-processor-for-our-headlines

也就是一个 自定义方言的一个注册类。  spring 加载 实例化 自定义的注册类

package com.framework.thyelaf;


import java.util.HashSet;
import java.util.Set;


import org.thymeleaf.dialect.AbstractProcessorDialect;
import org.thymeleaf.processor.IProcessor;
import org.thymeleaf.standard.StandardDialect;
import org.thymeleaf.standard.processor.StandardXmlNsTagProcessor;
import org.thymeleaf.templatemode.TemplateMode;


public class CmsDialect extends AbstractProcessorDialect{


private static final String DIALECT_NAME = "Phxl Dialect";//定义方言名称 

    


    public CmsDialect() {
        // 我们将设置此方言与“方言处理器”优先级相同
        // 标准方言, 以便处理器执行交错。     phxl 自定义标签的名称   在html 是这样写的 
        super(DIALECT_NAME, " phxl", StandardDialect.PROCESSOR_PRECEDENCE);
    }
    /*
     * 
     * 元素处理器:“matter”标签。
     */
    public Set getProcessors(final String dialectPrefix) {
        Set processors = new HashSet();
        processors.add(new MatterTagProcessor(dialectPrefix));//添加我们定义的标签
        
        processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));
        return processors;
    }
}



第二个类

package com.framework.thyelaf;
 
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IModel;
import org.thymeleaf.model.IModelFactory;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.templatemode.TemplateMode;


public class MatterTagProcessor extends  AbstractElementTagProcessor{

   // 

private static final String TAG_NAME  = "matter";//标签名 matter 这个玩意就是 自定义标签的 : matter了, 应该是

  可以定义多个标签

private static final int PRECEDENCE = 10000;//优先级


    public MatterTagProcessor( String dialectPrefix) {
    super(
                TemplateMode.HTML, // 此处理器将仅应用于HTML模式
                dialectPrefix,     // 要应用于名称的匹配前缀
                TAG_NAME,          // 标签名称:匹配此名称的特定标签
                true,              // 将标签前缀应用于标签名称
                null,              // 无属性名称:将通过标签名称匹配
                false,             // 没有要应用于属性名称的前缀
                PRECEDENCE);       // 优先(内部方言自己的优先)


        }            
    /**
     * context 页面上下文
     * tag  标签
     * 
     */
@Override
protected void doProcess(
final ITemplateContext context, 
final IProcessableElementTag tag,
            final IElementTagStructureHandler structureHandler) {


  /**
* 获取应用程序上下文。
        */
     //  ApplicationContext appCtx = SpringContextUtils.getApplicationContext(context);
       /*
        * 从标签读取“matterid”属性。标签中的这个可选属性将告诉我们需要什么样的数据
        * 
        */
       final String  matterid= tag.getAttributeValue("matterid");

       String logoimgText="在实体类中获取的对象???"; //  这里是 重点 , 在这里写 显示的内容

   可以 通过模板输出一段html 代码  返回到 页面 

       /*
        *  创建将替换自定义标签的DOM结构。
        * logo将显示在“
”标签内, 因此必须首先创建, 
        * 然后必须向其中添加一个节点。
        */
       final IModelFactory modelFactory = context.getModelFactory();


       final IModel model = modelFactory.createModel();


       model.add(modelFactory.createOpenElementTag("div"));
       model.add(modelFactory.createText(logoimgText));
       model.add(modelFactory.createCloseElementTag("div"));


       /*
        * 指示引擎用指定的模型替换整个元素。
        */
       structureHandler.replaceWith(model, false);
       
}

 

第三段代码 就是   要在springboot 配置类 中 去 加载 第一个类 

@Configuration     //  这玩意 可以写n个, 例如 springboot 加载 servlet filter Listener ,  就和在springmvc 配置  同理 , 只不过这个是在springboot 配置类 中去注册bean 。 不过也可以不用注册,自己研究一下。 

public class WebConfig {  

    @Bean
    public CmsDialect testDialect(){
        return new CmsDialect();
    }

}  


最后一步 在html 页面  去 写 一个 

   这个   就是你 自定义的标签 在页面显示的是

springboot+thymeleaf 实现 jsp 页面的自定义标签_第1张图片



你可能感兴趣的:(springboot+thymeleaf 实现 jsp 页面的自定义标签)