Thymeleaf表达式语法以及日期格式化(转)

https://blog.csdn.net/m0_38043362/article/details/78064177





Thymeleaf表达式语法以及日期格式化

2017年09月22日 16:18:47 试水流连 阅读数:10693

 版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/m0_38043362/article/details/78064177

简单表达式 (simple expressions)

${...}  变量表达式

*{...}  选择变量表达式

#{...}  消息表达式

@{...}  链接url表达式

1

2

3

4

5

6

7

字面量

Text literals: 'one text' , 'Another one!' ,…文本

Number literals: 0 , 34 , 3.0 , 12.3 ,…数字

Boolean literals: true , false布尔

Null literal: null空

Literal tokens: one , sometext , main ,…文本字符

1

2

3

4

5

6

7

8

9

文本操作

字符串连接

|The name is ${name}| 字符串连接

算术运算

+ , - , * , / , %  二元运算符

-  负号(一元运算符)

1

2

3

布尔操作

and,or 二元操作符

!,not 非(一元操作符)

关系操作符

, < , >= , <= (gt , lt , ge , le) 比大小

== , != (eq, ne) 比等值

条件判断

(if) ? (then)      if-then

(if) ? (then) : (else)  if-then-else 

1

2

3

<!-- 条件判断 -->

1

2

3

4

条件表达式中的三个部分自身也可以是表达式,也可以是变量(${...}, *{...}),

消息(#{...}), URL (@{...}) 或字面量 ('...')

条件表达式也可以使用括号来嵌套:

1

2

3

<!-- 条件判断 -->

1

2

3

else表达式也可以省略,当条件为false时,会返回null:

1

<!-- 条件判断 -->

1

2

3

(value) ?: (defaultvalue)  Default

只有第一个返回null时第二个表达式才会运算

1

2

表达式内置工具对象

#dates 与java.util.Date对象的方法对应,格式化、日期组件抽取等等#calendars 类似#dates,与java.util.Calendar对象对应#numbers格式化数字对象的工具方法#strings 与java.lang.String对应的工具方法:contains、startsWith、prepending/appending等等#objects 用于对象的工具方法#bools 用于布尔运算的工具方法#arrays 用于数组的工具方法#lists 用于列表的工具方法#sets 用于set的工具方法#maps 用于map的工具方法#aggregates 用于创建数组或集合的聚合的工具方法#messages 用于在变量表达式内部获取外化消息的工具方法,与#{…}语法获取的方式相同#ids 用于处理可能重复出现(例如,作为遍历的结果)的id属性的工具方法

1

2

3

4

5

6

7

8

9

10

11

12

13

表达式内置基本对象

#ctx : the context object.

#vars: the context variables.

#locale : the context locale.

#request : (only in Web Contexts) the HttpServletRequest object.

(在web环境下才可用)

#response : (only in Web Contexts) the HttpServletResponse object.

(在web环境下才可用)

#session : (only in Web Contexts) the HttpSession object.

(在web环境下才可用)

#servletContext : (only in Web Contexts) the ServletContext object.

(在web环境下才可用)

1

2

3

4

5

6

7

8

9

10

11

12

选择表达式(*{xx})

<!-- 选择表达式 --><!-- 等同于 -->

1

2

3

4

5

6

url连接@{…}

使用这种方式的好处就是可以自动将()内的中文参数自动进行URL编码

<!-- URL --><!-- href="/demo/page?param=%E6%B5%8B%E8%AF%95%E7%94%A8%E6%88%B7%EF%BC%81" -->demo page<!-- href="/" -->demo page<!-- href="/demo/page?param=%E6%B5%8B%E8%AF%95%E7%94%A8%E6%88%B7%EF%BC%81" -->demo page

1

2

3

4

5

6

7

变量表达式

变量表达式可以解析OGNL语法。详尽的语法信息可以访问官网: 

http://commons.apache.org/ognl/

字面值替换

<!--

替换字面值

<p th:text="|Welcome to our application, ${custUser.nickname}!|">你好</p>

等同于

<p th:text="'Welcome to our application, ' + ${custUser.nickname} + '!'">你好</p>

-->你好

1

2

3

4

5

6

7

数字运算

<!-- 数字运算 -->

1

2

message表达式#{..}

从配置文件中取配置的信息 

可以通过该表达式,实现国际化信息

<!-- 国际化,将submit按钮的message从messages_zh_CN.properties(默认)中获取 -->

1

2

3

4

5

6

7

属性设置

th:attr 为万能属性设置,内容为key value 形式多个属性用,号分隔

1

2

3

4

5

6

指定单个属性

1

2

支持的属性 

参见官方文档

属性介绍

<!--

追加属性 和 前置追加

email is :12222222@xx.com

12222222@xx.com is email.

--><!-- 数据回显时,使用这个方法来选择 -->123

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

循环

可以处理如下对象的遍历 

java.util.Iterable 

java.util.Enumeration 

java.util.Iterator 

java.util.Map 

any array

<!-- 循环标签 -->NAMEPRICEIN STOCK

        +'  '+ elementStat.count +'  '+ elementStat.size

        +'  '+ elementStat.current +'  '+ elementStat.even

        +'  '+ elementStat.odd +'  '+ elementStat.first

        +'  '+ elementStat.last}">OnionsNAMEPRICEIN STOCK

        +'  '+ iterStat.count +'  '+ iterStat.size

        +'  '+ iterStat.current +'  '+ iterStat.even

        +'  '+ iterStat.odd +'  '+ iterStat.first

        +'  '+ iterStat.last}">Onions<!--

        th:if 条件判断,相当于if(!(xx==xx)){}

        th:unless 与th:if正好相反

        -->角标不为1角标为1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

循环的状态属性 默认从element+Stat取值 或者自己制定 前缀+Stat 

index 角标从0开始 

count 从1开始 

size 集合大小 

current 当前元素 

even/odd 奇偶 

first(boolean) 

last(boolean)

switch语句

<!-- switch标签 -->User is an administratorhello my text!default

1

2

3

4

5

6

7

使用th:case=”*” 相当于default:

swich(x){case1:break;case2:break;default:}

1

2

3

4

5

6

7

8

Fragments片段表达式~{…} 3.0以后的版本支持

1.~{templatename::selector}

可以利用此功能方便地将重复的片段抽取出来

如footer header

1

2

3

4

<!-- 代码片段定义在fragment.html中 --><!-- <div th:fragment="copy">

    © 2011 The Good Thymes Virtual Grocery

</div> --><!-- 代码片段使用其他页面均可使用该表达式引入 --><!-- 替换掉当前外层div标签 --><!-- 这么写也可以 -->

1

2

3

4

5

6

7

8

9

10

11

12

2.~{templatename}

包含指定模板中所有内容

3.~{::selector}" or "~{this::selector}"

自己页面内的模板可以省略掉模板名称

1

2

3

4

5

以上的表达式都支持在selector中支持支持的所有表达式

1

也可以不使用 th:fragment来定义片段

© 2011 The Good Thymes Virtual Grocery

1

2

3

4

5

可以指定参数的Fragments片段

<!-- 指定参数的片段 --><!-- <div th:fragment="frag (onevar,twovar)">

<p th:text="${onevar} + ' - ' + ${twovar}">...</p>

</div> -->

1

2

3

4

5

6

7

Fragments片段支持嵌套

<!-- 指定要嵌套的片段 --><!-- 片段嵌套 -->

no operation

<!-- 片段嵌套 --><!-- 不指定参数 -->

1

2

3

4

5

6

7

8

9

10

11

12

这种不能放到一个页面里,否则会解析不到${otherfrag}

也可以使用表达式判断条件决定是否引入

定义局部变量

<!-- 定义局部变量 -->

The name of the first person isJulius Caesar.

1

2

3

4

5

6

行内表达式

<!-- 行内表达式 -->

今日阳光明媚,[[${custUser.nickname}]]

<!-- 与下面的等价 -->

今日阳光明媚,

1

2

3

4

格式化日期等${{user.lastAccessDate}}

...

1

使用${{xxx}}该表达式,解析器会根据符合 xxx类型–>String的转换器,进行转换 

例如:

@ConfigurationpublicclassThymeleafConfigextendsWebMvcConfigurerAdapterimplementsApplicationContextAware{....@OverridepublicvoidaddFormatters(finalFormatterRegistry registry) {super.addFormatters(registry);          registry.addFormatter(dateFormatter());      }@BeanpublicDateFormatterdateFormatter() {returnnewMyDateFormatter();      }      class MyDateFormatter extends DateFormatter{@OverridepublicStringprint(Date date, Locale locale) {returnnewSimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);        }      }}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,877评论 0 38
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,419评论 0 10
  • 天黑了。 A君不免有些失落:天黑了就什么都看不到了。 B君回道:仔细看,夜空中还有闪闪星河。
    Gordon_38e6阅读 166评论 0 0
  • 今天继续分享【得到】App付费专栏,李笑来《通往财富自由之路》第20周的内容——《如何认知、选择、培养正确的刚需》...
    注册营养师阿娟阅读 890评论 2 2
  • 最近发现了一个好网站:超新学术视频。里面有很多有用的专业视频可以学习,我打算利用坐轻轨的时间来看这些资料,而不是在...
    倒立的笔杆阅读 250评论 3 5