原文:http://www.csdn.com/html/topnews201408/49/1349.htm

下面以构造一个表单开始,讲解 Thymeleaf的用法。为了演示方便,还是以经典的注册为例。

这是Thymeleaf的form的形式,

   <form action="#" th:action="@{/register}" th:object="${person}" method="post">

    </form>

action="#"是固定部分,因为action是由th:action指出。@符号是Thymeleaf对URL表达的方式。这是本文的第一个知识点。

  • URL表达式

首先是绝对路径,

<a th:href="@{http://www.baidu.com}">

但最常用的肯定是相对路径。很多朋友把上下文相对路径和服务器相对路径混为一谈,其实它们是不同的。上下文相对路径都是以 / 开头的,比如是你的一个应用myapp部署在tomcat下,你可以用http://localhost:8080/myapp访问它,这里的myapp就是上下文名称。这时,

<a th:href="@{/login}">

解析后就是,

<a href="/myapp/login">

服务器相对路径和它区别是,服务器相对路径不会假设你的资源在应用上下文内,(你可能部署多个应用),也就是它允许你访问在同一个服务器的其他上下文。比如,

<a th:href="@{~/other-app/hello.html}" >

解析后就是,

<a href="/other-app/showDetails.htm">

当然还有一种相对路径(相对协议的),实际上是绝对路径,

<a th:href="@{<span style="font-family: Arial, Helvetica, sans-serif;">//code.jquery.com/jquery-1.10.2.js</span><span style="font-family: Arial, Helvetica, sans-serif;">}" ></span>

解析后就是,

<a href="//code.jquery.com/jquery-1.10.2.js">

接下来是URL的添加参数问题,

<a th:href="@{/order/details(id=3)}">

解析后,

<a href="/order/details?id=3">

多个参数可以在()内用逗号隔开。

下面的形式也是支持的,请细细体会,

<a th:href="@{/order/{id}/details(id=3,action='show_all')}">

解析后,

<a href="/order/3/details?action=show_all">

还有一个概念,叫URL fragment,什么是URL Fragment呢?

上面两张图基本说明了url fragment是什么了。

<a th:href="@{/home#all_info(action='show')}">

解析后,

<a href="/home?action=show#all_info">

下一个知识点是th:object,

  • th:object

该属性在Thymeleaf很常见,但form会强制要求你写这个。为了整合Spring,它对form里面的th:object规定如下:

  1. 必须是变量表达式(${...}),代表模型的名字,且不能向模型的属性导航,就是${a}合法,但${a.b}不合法
  2. form内不能有其他th:object,也就是HTML的表单不能嵌套
你可能猜到,这个object就是向后台传递数据的。
在stackoverflow有个提问,"send datas from html to controller in thymeleaf?",采纳的答案是这样的:
controller:
@RequestMapping(value = "/processForm", method=RequestMethod.POST)
public String processForm(@ModelAttribute(value="foo") Foo foo) {
...
}

html:

<form action="#" th:action="@{/processForm}" th:object="${foo}" method="post">
<input type="text" th:field="*{bar}" />
<input type="submit" />
</form>
 

Foo.java

public class Foo {
private String bar; public String getBar() {
return bar;
} public void setBar(String bar) {
this.bar = bar;
}
}

看完之后,你肯定就能豁然开朗了。

 
还有个知识点是 th:field。
 
  • th:field

这个属性在Spring-mvc里很重要,承担着绑定后台Bean属性的重任,这和JSP标签里的path很像。

对不同类型的input,th:field有些差异。这个之后再说。
要记住的是,th:field必须是选择表达式(*{...})。
 
最后,你可能对前面提到的表达式有疑问了。
变量表达式 ${...}就是OGNL表达式。如果你使用springstandard,就是Spring表达式(SpEL)。
给个例子你就明白了,
<span th:text="${book.author.name}">
 

选择表达式*{...}很像变量表达式,不同在于,它执行的是前面选择的对象。

<div th:object="${book}">
...
<span th:text="*{title}">...</span>
...
</div>

前面选择了book,接下来就按照它求值。

 
还有一个表达式,前面没有出现。国际化表达式#{...},顾名思义是处理国际化的。
<table>
...
<th th:text="#{header.address.city}">...</th>
<th th:text="#{header.address.country}">...</th>
...
</table>

国际化资源一般是在.properties文件定义。

转--Spring MVC : Java模板引擎 Thymeleaf (三)的更多相关文章

  1. Spring MVC : Java模板引擎 Thymeleaf (三)

    以下以构造一个表单開始,解说 Thymeleaf的使用方法. 为了演示方便,还是以经典的注冊为例. 这是Thymeleaf的form的形式, <form action="#" ...

  2. 新一代Java模板引擎Thymeleaf

    新一代Java模板引擎Thymeleaf-spring,thymeleaf,springboot,java 相关文章-天码营 https://www.tianmaying.com/tutorial/u ...

  3. springboot:Java模板引擎Thymeleaf介绍

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  4. SpringBoot系列:Spring Boot使用模板引擎Thymeleaf

    一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...

  5. Spring MVC : Java模板引擎 Thymeleaf (二)

    本文原计划直接介绍Thymeleaf的视图解析,但考虑到学习的方便,决定先构建一个spring-mvc. 以下的全部过程仅仅要一个记事本和JDK就够了. 第一步,使用maven构建一个web app. ...

  6. SpringBoot入门:新一代Java模板引擎Thymeleaf(理论)

    Spring Boot 提供了spring-boot-starter-web来为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及SpringMVC的 ...

  7. Spring Boot整合模板引擎thymeleaf

    项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --> <dependency> <groupId>org.springframew ...

  8. SpringBoot入门:新一代Java模板引擎Thymeleaf(实践)

    菜鸟教程:http://www.runoob.com/ http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js http://apps.b ...

  9. Spring Boot (四)模板引擎Thymeleaf集成

    一.Thymeleaf介绍 Thymeleaf是一种Java XML / XHTML / HTML5模板引擎,可以在Web和非Web环境中使用.它更适合在基于MVC的Web应用程序的视图层提供XHTM ...

随机推荐

  1. 使用Spring框架整合Java Mail

    我的博客名为黑客之谜,今天演示的案例中会出现我的邮箱,还不赶紧收藏!我现在是小白,但是随着时间的流逝,我会逐渐向大神走进,所以,喜欢我的,或者喜欢大神的,点一波关注吧!顺便说一下,双十二快到了,有什么 ...

  2. MyBatis-Spring整合之方式1

    导入相关包:Spring包:Spring架包 MyBatis包:MyBatis架包 整合包:Mybatis-Spring整合包 编写实体类User,实体类的sql映射文件,映射内容如下: <?x ...

  3. Git创建和删除标签

    创建标签 标签是一个让人容易记住的有意义的名字,它跟某个commit绑在一起.在Git中打标签非常简单,首先,切换到需要打标签的分支上,然后,敲命令git tag <name>就可以打一个 ...

  4. 【题解】Rusty String [CF827E]

    [题解]Rusty String [CF827E] 传送门:\(\text{Rusty String}\) \(\text{[CF827E]}\) [题目描述] 多组数据,每组数据给出一个由 \(V, ...

  5. 分布式事务 --- BASE 理论

    部分图片总结出自参考资料 问题 : Base 理论为什么会被提出,动机是什么 Base 和 ACID 的区别与联系 概述 上一篇我们知道CAP 理论,也知道由于现实中网络等原因,分区容错性这一元素大多 ...

  6. 【MySQL】存储引擎

    " 目录 #. MySQL支持的存储引擎 1. InnoDB 2. MyISAM 3. NDB 4. Memory 5. Infobright 6. NTSE 7. BLACKHOLE My ...

  7. 多个python版本共存时,查看pip命令属于哪个python的命令

    使用命令: pip -V 或 pip3 -V

  8. hackme.inndy.tw - pyyy

    0x01 反编译 1.第一次尝试的时候我直接在线反编译,部分结果如下. for (i, f) in enumerate(F): n = pow(f, m, g) this_is = 'Y-Combin ...

  9. Android 调起系统相机拍照

    概述 最近在看 nanChen 写的图片选择器 ImagePicker,感觉写得很不错,也打算把从中学到的东西写下来.很多时候,遇到一个好的框架能够降低开发成本这是好事.但是也要去了解其内部具体实现逻 ...

  10. C++的new&delete

    new的过程 new的过程:先分配memory,再调用ctor 我们常用的创建对象的方法有两种 Complex c(1,2); //栈 Complex *pc = new Complex(1,2); ...