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

SpringBoot2中使用thymeleaf3自定义分页方言,第1张

### 1、定义方言Dialect

继承AbstractProcessorDialect

```

public class PagingDialect extends AbstractProcessorDialect {

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

    public PagingDialect() {

        super(DIALECT_NAME, "paging", StandardDialectPROCESSOR_PRECEDENCE);

        //优先级:值必须为:StandardDialectPROCESSOR_PRECEDENCE

    }

    @Override

    public Set getProcessors(String dialectPrefix) {

        Set processors = new HashSet();

        //添加我们定义的标签

        processorsadd(new PagingTagProcessor(dialectPrefix));

        processorsadd(new StandardXmlNsTagProcessor(TemplateModeHTML, 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(

                TemplateModeHTML,      // 此处理器将仅应用于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 (StringUtilsisEmpty(queryString)) {

            pageUrl = url + "page=";

        } else {

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

        }

        ApplicationContext appCtx = SpringContextUtilsgetApplicationContext(context);

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

        String pageIndexString = taggetAttributeValue("value");

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

        String pageSizeString = taggetAttributeValue("size");

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

        String totalSizeString = taggetAttributeValue("rows");

    }

}

```

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

在SpringBoot Application类中加入注入

```

    @Bean

    public PagingDialect paging() {

        return new PagingDialect();

    }

```

### 4、页面应用

```

```

模板引擎和前端框架的区别是什么?

1JSP、Velocity、Thymeleaf等这是模板引擎,Jquery、Vue等这是前端框架。so,它们不一样。

2缓存模板结构,在数据层 *** du作完直接套用模板输出到客户端界面中,减少dom *** 作的异常、减少拼接html的痛苦、减少各浏览器下dom *** 作的延迟差异 。这是模板引擎干的事情。

3前端框架,提升开发效率,dom加载效率等。

为何选Thymeleaf,而抛弃了别的模板引擎比如JSP

1SpringBoot默认整合Thymeleaf,不需要任何配置直接整合成功,打jar包发布不需要做任何配置。

2Thymeleaf相对于其他的模板引擎(如:Freemaker、velocity),有强大的工具支持。

3相对于Jsp页面,执行效率高。

记录一个错误,是SpringBoot 和thumeleaf版本冲突的问题,这里需要把上面的切换版本配置改改

错误: An attempt was made to call the method orgthymeleafspring5SpringTemplateEnginesetRenderHiddenMarkersBeforeCheckboxes(Z)V but it does not exist Its class, orgthymeleafspring5SpringTemplateEngine, is available from the following locations

写一个小的测试,在Controller中添加一个访问,并在template目录下写个successhtml

使用 >

一、

>

Request参数

假设请求的url为:/user/getid=12

1、访问参数id可以使用param前缀,例如:${paramid!=null}检查是否有参数id;

2、参数是一个数组,因为它可以多值比如id=a&name=test,所以可以采用下标的方式访问,例如:

<p th:text="${paramq[0]}" th:unless="${paramq == null}">11</p>

3、还有一种访问方式是使用#>

不能直接通过html访问,因为这样的话,没有经过后台传值,不知楼主使用的是哪个框架,springg mvc或ssprin boot的话,controller,通过访问controller返回静态页面,详细可以看看在线助手工具的Spring Boot同时整合thymeleaf html、vue html和jsp >

在模板处理前,thymeleaf还会增加一个变量execInfo,比如${execInfotemplateName},${execInfonow}等。

数据访问模式:

${},变量引用模式,比如${myBeanproperty},如果用springDialect,则使用的是spring EL,如果不用spring,则用的ognl。

{},选择表达式,一般是th:object之后,直接取object中的属性。当没有选取对象时,其功能等同${},{firstName}也等同于${#objectfirstName},#object代表当前选择的对象。

@{}链接url的表达式。th:href="@{/xxx/aado(id=${oid})",会自动进行url-encoding的处理。@{}内部可以是需要计算的表达式,比如:

th:href=”@{'/details/'+${userlogin}(orderId=${oid})}"

#{},i18n,国际化。

需要注意的:

#{${welcomeMsgKey}(${sessionusername})}:i18n message支持占位。各个表达式支持嵌套。

表达式基本对象:

#ctx:context object

#root或者#vars

#locale

#>

以上就是关于SpringBoot2中使用thymeleaf3自定义分页方言全部的内容,包括:SpringBoot2中使用thymeleaf3自定义分页方言、Thymeleaf 模板引擎的使用、用thymeleaf用标签给页面select下拉框赋值怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10140825.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存