SpringBoot2中使用thymeleaf3自定义分页方言

### 1、定义方言Dialect

继承AbstractProcessorDialect

```

public class PagingDialect extends AbstractProcessorDialect {

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

    public PagingDialect() {

        super(DIALECT_NAME, "paging", StandardDialect.PROCESSOR_PRECEDENCE);

        //优先级:值必须为:StandardDialect.PROCESSOR_PRECEDENCE

    }

    @Override

    public Set getProcessors(String dialectPrefix) {

        Set processors = new HashSet();

        //添加我们定义的标签

        processors.add(new PagingTagProcessor(dialectPrefix));

        processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));

        return processors;

    }

}

```

### 2、添加自定义处理程序Processor

继承AbstractElementTagProcessor

```

public class PagingTagProcessor extends AbstractElementTagProcessor {

    private static final String TAG_NAME = "pager";//标签名

    private static final int PRECEDENCE = 10000;//优先级,必须是10000,否则读取不到标签的赋值

    public PagingTagProcessor(String dialectPrefix) {

        super(

                TemplateMode.HTML,      // 此处理器将仅应用于HTML模式

                dialectPrefix,          // 要应用于名称的匹配前缀

                TAG_NAME,              // 标签名称:匹配此名称的特定标签

                true,                  // 没有要应用于标签名称的前缀

                null,                  // 无属性名称:将通过标签名称匹配

                false,                  // 没有要应用于属性名称的前缀

                PRECEDENCE              // 优先(内部方言自己的优先)

        );

    }

    @Override

    protected void doProcess(ITemplateContext context,

                            IProcessableElementTag tag,

                            IElementTagStructureHandler structureHandler) {

        String url = ((WebEngineContext) context).getRequest().getRequestURL().toString();

        String queryString = ((WebEngineContext) context).getRequest().getQueryString();

        String pageUrl = "";

        if (StringUtils.isEmpty(queryString)) {

            pageUrl = url + "?page=";

        } else {

            pageUrl = url + "?" + queryString + "&page=";

        }

        ApplicationContext appCtx = SpringContextUtils.getApplicationContext(context);

        //读取标签内容(当前页),注意标签必须是自带标签才能正常读取值

        String pageIndexString = tag.getAttributeValue("value");

        //读取标签内容(页码大小)

        String pageSizeString = tag.getAttributeValue("size");

        //读取标签内容(数据大小)

        String totalSizeString = tag.getAttributeValue("rows");


    }

}

```

### 3、使用@Bean注解完成方言注入

在SpringBoot Application类中加入注入

```

    @Bean

    public PagingDialect paging() {

        return new PagingDialect();

    }

```

### 4、页面应用

```

```

推荐阅读更多精彩内容