美文网首页
SpringBoot2中使用thymeleaf3自定义分页方言

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

作者: 老齐点墨 | 来源:发表于2018-08-23 16:20 被阅读0次

    ### 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、页面应用

    ```

    ```

    相关文章

      网友评论

          本文标题:SpringBoot2中使用thymeleaf3自定义分页方言

          本文链接:https://www.haomeiwen.com/subject/bbttpttx.html