SpringBoot:thymeleaf-模板引擎

1.模板引擎

JSP、Velocity、Freemarker、Thymeleaf;

它们的作用是把html(模板)中的动态的数据标识和后台程序中对应的数据内容匹配起来,渲染在模板页面上。

SpringBoot推荐的是Thymeleaf模板引擎,语法更简单,功能更强大。

2.Thymeleaf

2.1 引入

SpringBoot引入:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

如果要切换版本,在properties标签里改,自己百度下格式就好。

2.2 使用

SpringBoot提供了Thymeleaf的自动配置,包括了关于Thymeleaf如何进行找到模板资源的相关配置:

public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING;
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    public static final String DEFAULT_SUFFIX = ".html";
    private boolean checkTemplate = true;
    private boolean checkTemplateLocation = true;
    private String prefix = "classpath:/templates/";
    private String suffix = ".html";
}

它的默认配置的渲染模板后缀为".html",默认的寻找路径是classpath下的templates文件夹下。所以我们只要把html页面反正类路径下的templates文件夹下,就能够自动地对其进行thymeleaf渲染。

与此同时,配置了thymeleaf之后,SpringBoot框架将能够解析templates下的静态资源文件。但不影响SpringBoot的默认的静态资源文件夹的访问,可以同时进行。被thymeleaf动态渲染的页面只能在templates文件夹下,且不能用GET请求直接访问,必须转发才能访问。GET请求只能访问默认静态文件夹根目录的文件,要访问默认静态文件夹下文件夹里的文件必须用POST请求转发,在themeleaf框架下,templates文件夹也是默认静态文件根目录,如果它下面还有文件夹,也许要用POST请求才可以访问。

https://www.thymeleaf.org/documentation.html,可以在这里找到thymeleaf的官方文档,引导使用,举例:

1).首先要在html页面的html标签里引入thymeleaf的语法支持:“xmlns:th = "http://www.thymeleaf.org"”;

2).th:属性名 = "${hello}",表示将该元素的某个属性名设置为指定的值。${}中的参数是用map或者model放入session域中的关键字,用它来取出对应的数据值,即我们指定的值。

2.3 语法

1).th关键字可以修改任意的html元素的属性。

在官方文档中,我们对语法使用进行截图:

Attribute Precedence

2).标准表达式语法

Simple expressions:(表达式语法)
    Variable Expressions: ${...}    //获取表达式,OGNL。
        //1.获取对象的属性
        //2.使用OGNL内置的基本对象
            /*  #ctx: the context object.
                #vars: the context variables.
                #locale: the context locale.
                #request: (only in Web Contexts) the HttpServletRequest object.
                #response: (only in Web Contexts) the HttpServletResponse object.
                #session: (only in Web Contexts) the HttpSession object.
                #servletContext: (only in Web Contexts) the ServletContext object.
            */
        //3.使用内置的工具对象
            /*
                #execInfo: information about the template being processed.
                #messages: methods for obtaining externalized messages inside variables             expressions, in the same way as they would be obtained using #{…} syntax.
                #uris: methods for escaping parts of URLs/URIs
                #conversions: methods for executing the configured conversion service (if any).
                #dates: methods for java.util.Date objects: formatting, component extraction, etc.
                #calendars: analogous to #dates, but for java.util.Calendar objects.
                #numbers: methods for formatting numeric objects.
                #strings: methods for String objects: contains, startsWith, prepending/appending, etc.
                #objects: methods for objects in general.
                #bools: methods for boolean evaluation.
                #arrays: methods for arrays.
                #lists: methods for lists.
                #sets: methods for sets.
                #maps: methods for maps.
                #aggregates: methods for creating aggregates on arrays or collections.
                #ids: methods for dealing with id attributes that might be repeated (for example, as a result of an iteration).
            */
    Selection Variable Expressions: *{...}
        //和${}的功能是一样的,但有个补充功能如下:
        /*
            <div th:object="${session.user}">
                <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
                <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
                <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
            </div>
            配合th:object一起使用,可以用*号来指代刚刚创建的那个对象
        */
    Message Expressions: #{...}    //获取国际化内容
    Link URL Expressions: @{...}    //定义url链接
        /*    
            <!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) -->
            <a href="details.html" 
   th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>

            <!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) -->
            <a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>

            <!-- Will produce '/gtvg/order/3/details' (plus rewriting) -->
            <a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>
        */
    Fragment Expressions: ~{...}    //插入文档
Literals(字面量)
    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,…
Text operations:(字符串操作)
    String concatenation: +
    Literal substitutions: |The name is ${name}|
Arithmetic operations:(数学运算)
    Binary operators: +, -, *, /, %
    Minus sign (unary operator): -
Boolean operations:(布尔运算)
    Binary operators: and, or
    Boolean negation (unary operator): !, not
Comparisons and equality:(比较运算)
    Comparators: >, <, >=, <= (gt, lt, ge, le)
    Equality operators: ==, != (eq, ne)
Conditional operators:(条件运算,包括三元运算符)
    If-then: (if) ? (then)
    If-then-else: (if) ? (then) : (else)
    Default: (value) ?: (defaultvalue)
Special tokens:
    No-Operation: _ (不做任何操作的特殊字符)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值