springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(一)

  最近在写一个cms系统项目,因为使用过thymeleaf模板引擎,所以技术选择打算用springboot+thymeleaf来完成。但thymeleaf的相关资料太少,因此打算写一篇关于thymeleaf自定义方言系统的教程,帮助大家学习thymeleaf。

    给大家简单介绍些thymeleaf的方言系统的组成,直接上图简单明了

springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(一)_第1张图片

        首先,要自定义标签,需要继承AbstractProcessorDialect类 并实现其方法

public class CmsDialect extends AbstractProcessorDialect{

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

        然后创建一个新的标签处理器并继承AbstractElementTagProcessor类

public class MatterTagProcessor extends AbstractElementTagProcessor{

	private static final String TAG_NAME  = "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);
       MatterMapper mapper=appCtx.getBean(MatterMapper.class);
       /*
        * 从标签读取“matterid”属性。标签中的这个可选属性将告诉我们需要什么样的数据
        * 
        */
       final String  matterid= tag.getAttributeValue("matterid");
       
       
       Matter matter=mapper.tagSelectByMid(Integer.parseInt(matterid));
       
       String logoimgText=null;
       
      if(null!=matter){    	  
    	  logoimgText= matter.getMatterDetails();
      }else{
    	  logoimgText="无素材信息" ;
      }


       /*
        *  创建将替换自定义标签的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); } }

        以上我们完成了thymeleaf自定义标签部分的代码,然后我们就需要在springboot注入我们的自定义方言!

springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(一)_第2张图片

        最后,我们在前台页面上使用自己的方言系统就可以了

 

 


<html xmlns:th="http://www.thymeleaf.org" xmlns:phxl="" >
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
 	<phxl:matter matterid="7"/>
body>
html>

 

补充:在springboot中,要定义thymeleaf的版本只需要在pom中加

3.0.2.RELEASE
2.1.1

就可以了

 
  

你可能感兴趣的:(springboot+thymeleaf 实现thymeleaf自定义方言系统 自定义标签, cms系统搭建(一))