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

下面以构造一个表单开始,讲解 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文件定义。

时间: 2024-10-08 10:55:13

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

SpringBoot(5)新一代Java模板引擎Thymeleaf

Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎.与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用. Thymeleaf初探 相比于其他的模板引擎,Thymeleaf最大的特点是通过HTML的标签属性渲染标签内容,以下是一个Thymeleaf模板例子: <!DOCTY

springboot:Java模板引擎Thymeleaf介绍

Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎.与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用. Thymeleaf初探 相比于其他的模板引擎,Thymeleaf最大的特点是通过HTML的标签属性渲染标签内容,以下是一个Thymeleaf模板例子: <!DOCTY

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

本文原计划直接介绍Thymeleaf的视图解析,但考虑到学习的方便,决定先构建一个spring-mvc. 下面的所有过程只要一个记事本和JDK就够了. 第一步,使用maven构建一个web app. <span style="font-size:18px;">mvn archetype:generate -DgroupId=org.nwpu.chen -DartifactId=spring-mvc -DarchetypeArtifactId=maven-archetype-

Spring MVC : Java模板引擎 Thymeleaf (一)

在Java世界的MVC框架里,使用的视图技术不少,最基本的是JSP,还有知名的FreeMarker和Velocity等模板引擎.Thymeleaf也是一款优秀的模板引擎,它在HTML5/XHTML的视图层表现的很好,也能在离线情况下处理任何XML文件.它是完全可以替代JSP+JSTL的. 下面是来自于Thymeleaf官方的Q&A: Q: 和FreeMarker,Velocity相比,Thymeleaf表现得怎样呢? A:FreeMarker和Velocity都是软件领域杰出的作品,但它们在解决

Spring Boot 整合模板引擎 Freemaker、thymeleaf

1.常用的 Spring Boot 2.x 模板引擎和官方推荐案例 1)JSP(后端渲染,消耗性能) Java Server Pages 动态网页技术,由应用服务器中的 JSP 引擎来编译和执行,再将生成的整个页面返回给客户端.优点是:可以写java代码.支持表达式语言(el.jstl).内建函数. 但 JSP 本质上是 Servlet,它非常占用 JVM 内存.Java Web 官方推荐,但 Spring Boot 不推荐https://docs.spring.io/spring-boot/d

jetbrick,新一代 Java 模板引擎,具有高性能和高扩展性

新一代 Java 模板引擎,具有高性能和高扩展性. <!-- Jetbrick Template Engineer --> <dependency> <groupId>com.github.subchen</groupId> <artifactId>jetbrick-template-springmvc</artifactId> <version>2.0.10</version> </dependency

SpringBoot:模板引擎 Thymeleaf 基础使用

1    第2-3课:模板引擎 Thymeleaf 基础使用 1.1     模板引擎 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的 HTML 文档. 模板引擎的实现方式有很多,最简单的是"置换型"模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换,便生成了最终需要的业务数据(如网页). "置换型"模板引擎实现简单,但其效率低下,无法满足高负载的应用需求(比如有海量

httl开源JAVA模板引擎,动态HTML页面输出

HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. HTTL采用类似于JSP的原理,将模板编译成Java字节码运行,但比JSP的EL更进一步,使用强类型推导,减少运行期反射和转型,更加快速. 缺省配置下,HTTL不需要依赖任何三方类库即可运行.   二进制包 源代码包 源码仓库 HTTL核心包 httl-1.0.11.jar httl-1.0.11-

基于Spring MVC的Web应用开发(三) - Resources

基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的web.xml配置的DispatcherServlet对应的url-pattern为"/",即所有的URL请求都会经过 Spring MVC的处理.实际的Web项目有大量的资源文件,如javascript文件,css文件,png,jpg等图片文件,甚至是Flash等等,我们没有 必要对这些静态