以下以构造一个表单開始,解说 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}">

但最经常使用的肯定是相对路径。非常多朋友把上下文相对路径和server相对路径混为一谈,事实上它们是不同的。上下文相对路径都是以 / 开头的,比方是你的一个应用myapp部署在tomcat下。你能够用http://localhost:8080/myapp訪问它。这里的myapp就是上下文名称。

这时。

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

解析后就是,

<a href="/myapp/login">

server相对路径和它差别是,server相对路径不会如果你的资源在应用上下文内。(你可能部署多个应用),也就是它同意你訪问在同一个server的其它上下文。比方,

<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呢?

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmxvdmVpdA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">



上面两张图基本说明了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 (三)

    原文:http://www.csdn.com/html/topnews201408/49/1349.htm 下面以构造一个表单开始,讲解 Thymeleaf的用法.为了演示方便,还是以经典的注册为例. ...

  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. Windows server 2008 布署FTP服务器实例(适用于阿里云)!

    Windows server 2008 布署FTP服务器实例(适用于阿里云). 1.打开管理.配置-用户-新建用户,如:ftp_user,并设置password.选择永只是期和password不能更改 ...

  2. Sqoop框架基础

    Sqoop框架基础 本节我们主要需要了解的是大数据的一些协作框架,也是属于Hadoop生态系统或周边的内容,比如: ** 数据转换工具:Sqoop ** 文件收集库框架:Flume ** 任务调度框架 ...

  3. ItemTouchHelper(实现RecyclerView上添加拖动排序与滑动删除的所有事情)

    简单介绍: ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情.它是RecyclerView.ItemDecoration的子类 ...

  4. go语言中在变量后加上接口是什么意思?

    如题刚刚开始学习go 语言有些不懂: a.Data = make(map[string]interface{}) 我认为它是在申请a.Data map为字符串类型的空间,那么它后面接一个空的inter ...

  5. [BeiJing2009 WinterCamp]取石子游戏 Nim SG 函数

    Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

  6. 在ubuntu上使用华为的3G无线上网卡 - usb_modeswitch

    众所周知,华为或者中兴的无线上网卡是比较好用的,U盘一样的东西,插进电脑的Usb口就能用,但是,这只是针对windows操作系统而言. 对于linux系统,该设备是无法自动加载驱动的. 因此,需要用到 ...

  7. P2420 让我们异或吧(树链剖分)

    题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...

  8. [Python] Plotting multiple stocks

    import os import pandas as pd import matplotlib.pyplot as plt def test_run(): start_date='2017-01-01 ...

  9. java反射机制剖析(二)— Class Loader

    上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...

  10. Unity 之 C# 利用回调函数实现C++匿名函数

    做C++开发的都用过匿名函数很好用,可是C#开发怎么实现呢?前几天做一个拍照功能的时候.我偶然发现某个函数假设是C++的话.用匿名函数太好了,于是開始研究C#的回调,代理.托付等,最后总算是实现了我想 ...