thymeleaf标准表达式语法

ThymeLeaf模板 ginotang 1101℃ 0评论

五种标准表达式语法

在前面的文章中我们已经使用过两种表达式语法:它们是${variable}和#{property};另外还有三种语法,分别是:

  • *{selectionVariable}  选择对象语法
  • @{link}       链接生成语法
  • ~{fragment}     模板引用语法

th:object和*{selectionVariable}语法

星号表达式语法*{}在某种情况下和${}表达式语法作用基本一样,这种情况就是在没有选择对象的时候。当选择对象存在,则*{}的取值上下文限制到被选择的对象上面,而无论什么情况下,${}都会到context上下文中获取变量。

假设当前上下文中有一个变量user,使用${}语法获取变量值是这样的:

使用th:object*{}语法可以简化代码:

th:object中的值${user}在ul范围内可见,换句话说,只要是ul的子标签,都可以访问到该值,然后就可以使用*{}直接访问user对象的属性。th:object中的值就是选择的对象。

一旦当前范围内存在选择的对象,就可以使用thymeleaf预定义的变量#object引用该值。

上面的代码和前一种方法等价,只不过使用#object的代码量要多一点罢了。

生成链接:th:href和@{link}

@{link}表达式的作用是把动态生成的超链接替换到<a>标签的href中。它既能生成绝对URL,也能生成相对URL。

两者生成的链接输出到浏览器之后都是一样,都是:

http://localhost:8080/thymeleaf/post/1

可以看到,链接语法中可以放置变量占位符{},替换变量放到链接的最后面,且使用括号()括起来。

如果有多个变量,使用逗号分隔:

生成结果是:http://localhost:8080/thymeleaf/post/1/java-programming

模板引用:th:fragment和~{template}

一个网页通常都会拆分成几个部分:header、main、footer、sidebar等。通过~{}语法,可以把各个部分重新组合到一起。

使用th:fragment创建fragment

现有header.html模板,里面创建了两个fragment,分别是banner和menu,内容如下:

拥有th:fragment标签属性的就是fragment定义,创建好fragment后可以在其他模板中引用它们。

使用th:insert引用fragment

在主页中引用前面创建好的fragment

~{}中::分隔符前面的header就是header.html,后面的banner就是header.html中创建的fragment名称。在模板引用语法中,~{}是非必须的,可以去掉:

我们还可以一次引入整个模板,例如整个header:

除了从其他模板引入fragment,还可以引入当前模板的fragment:

通过id引用fragment

前面的例子中我们使用的ragment是通过th:fragment显式创建的,其实这不是必须的,thymeleaf可以直接通过标签的id作为fragment的属性来引用:

header.html的内容改为:

然后在首页中引用:

th:insert和th:replace的区别

除了th:insert外,我们还可以使用th:replace引用fragment,用一个例子阐述它们的区别。

现有footer.html定义如下fragment:

两种引用方式分别是:

渲染结果:

HomeServlet代码

 

转载请注明:Pure nonsense » thymeleaf标准表达式语法

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x