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);        }      }}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

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