• (二)Thymeleaf标准表达式之——简单表达式


    2. 标准表达式(Standard Expression Syntax)

    标准表达式包含以下几个方面:
    • 简单表达式:
      • 变量表达式: ${...}
      • 选择变量表达式: *{...}
      • 消息表达式: #{...}
      • 链接网址表达式: @{...}
      • 片段表达式: ~{...}
    • 字面
      • 文本文字:'one text''Another one!',...
      • 数字文字:0343.012.3,...
      • 布尔文字:truefalse
      • 空字面: null
      • 文字标记:onesometextmain,...
    • 文字操作:
      • 字符串连接: +
      • 文字替代: |The name is ${name}|
    • 算术运算:
      • 二元运算符:+-*/%
      • 减号(一元运算符): -
    • 布尔运算:
      • 二元运算符:andor
      • 布尔否定(一元运算符): !not
    • 比较和相等:
      • 比较:><>=<=gtltgele
      • 相等判断:==!=eqne
    • 条件运算符:
      • IF-THEN: (if) ? (then)
      • IF-THEN-ELSE: (if) ? (then) : (else)
      • 默认: (value) ?: (defaultvalue)
    • 特殊令牌:
      • 无操作: 

    下面将分别介绍:

    2.1 简单表达式

    2.1.1变量表达式:${...}

    模板名称:var.html   原理类似OGNL/SpringEL表达式
    e.g.
    1. Established locale country: <span th:text="${#locale.country}">US</span>
    2. <p>  Today is: <span th:text="${#calendars.format(today,'dd MMMM yyyy')}">13 May 2011</span></p>
    附:

    ① Expression Basic Objects  (表达式基本对象)

    当对上下文变量评估OGNL表达式时,某些对象可用于表达式以获得更高的灵活性。这些对象将被引用(按照OGNL标准),从#符号开始:
    • #ctx:上下文对象。
    • #vars: 上下文变量。
    • #locale:上下文区域设置。
    • #request:(仅在Web上下文中)HttpServletRequest对象。
    • #response:(仅在Web上下文中)HttpServletResponse对象。
    • #session:(仅在Web上下文中)HttpSession对象。
    • #servletContext:(仅在Web上下文中)ServletContext对象。

    示例:

    Established locale country: <span th:text="${#locale.country}">US</span>.

    ② Expression Utility Objects(表达式实用对象)

    除了这些基本的对象之外,Thymeleaf将为我们提供一组实用对象,这些对象将帮助我们在表达式中执行常见任务。

    • #execInfo:有关正在处理的模板的信息。
    • #messages:在变量表达式中获取外部化消息的方法,与使用#{...}语法获得的方式相同。
    • #uris:转义URL / URI部分的方法
    • #conversions:执行配置的转换服务(如果有)的方法。
    • #datesjava.util.Date对象的方法:格式化,组件提取等
    • #calendars:类似于#dates但是java.util.Calendar对象。
    • #numbers:用于格式化数字对象的方法。
    • #stringsString对象的方法:contains,startsWith,prepending / appending等
    • #objects:一般对象的方法。
    • #bools:布尔评估的方法。
    • #arrays:数组方法。
    • #lists:列表的方法。
    • #sets:集合的方法。
    • #maps:地图方法。
    • #aggregates:在数组或集合上创建聚合的方法。
    • #ids:处理可能重复的id属性的方法(例如,作为迭代的结果)。

    2.1.2选择性/星号表达式:*{...}

    不仅可以将变量表达式写为${...},也可以写*{...}

    有一个重要的区别:星号语法评估所选对象而不是整个上下文的表达式也就是说,只要没有选定的对象,美元和星号语法就会完全相同。

    模板名称:star.html
    e.g.
     <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>

    equals.

    <div>
      <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
      <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
      <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
    </div>

    2.1.3 消息表达式:#{...}

    模板名称:message.html message 国际化支持 语法格式:#{  }
    e.g.
    <p th:utext="#{home.welcome}">Welcome to our grocery store!</p>

    2.1.4 链接表达式:@{...}

    模板名称:link.html
    语法格式:@{  }
     
        
    示例:
    <!-- 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>

     下面针对不同类型网址做一详细介绍

    ①.绝对URL(Absolute URLs) 开始通过指定协议名称(包含http://或https://开头)
    e.g.
    <a th:href="@{http://www.thymeleaf/documentation.html}"></a>
    equals:
    <a href="http://www.thymeleaf/documentation.html"></a>
    ②. 上下文相关的URL(Context-relative URLs) 最常用的如应用程序myapp的访问地址:http://localhost:8080/myapp,那么myapp就是上下文名称。
    e.g.<a th:href="@{/order/list}"></a>
    equals:<a href="/myapp/order/list"></a>  
    说明:“/”表示从应用程序根路径开始访问 ,去掉“/”表示相对路径
    ③.相对于服务器的URL(Server-relative URLs) 用法类似2,连接到同一服务器不同应用程序中
    e.g.
    <a th:href="@{~/billing-app/showDetails.htm}"></a>
    equals:
    <a href="/billing-app/showDetails.htm"></a>
    note:当前应用程序的上下文myapp将被忽略
    ④.协议相对URL(Protocol-relative URLs) 通常用于,包括外部资源,如样式,脚本等。保证协议(HTTP,HTTPS)用于显示当前页面的绝对URL。
    e.g.
    <script th:src="@{//scriptserver.example.net/myscript.js}">...</script>
    equals:
    <script src="//scriptserver.example.net/myscript.js">...</script>
    ⑤.带参数的URL表达式
    e.g.
    1.<a th:href="@{/order/details(id=3)}"></a>
    equals:
    <a href="/order/details?id=3"></a>
    2.携带多参数:<a th:href="@{/order/details(id=3,action='show_all')}"></a>
    equals:
    <a href="/order/details?id=3&action=show_all"></a>

    2.1.5 片段表达式:~{...}

    片段表达式的语法是非常简单的。有三种不同的格式:

    • "~{templatename::selector}"包含在命名的模板上应用指定的标记选择器导致的片段templatename。请注意,selector可以只是一个片段名称,所以你可以指定~{templatename::fragmentname}~{footer :: copy}上面那样简单的东西。
    标记选择器语法由底层的AttoParser解析库定义,类似于XPath表达式或CSS选择器。
    • "~{templatename}"  包括完整的模板命名templatename
    请注意,您在th:insert/ th:replacetags中使用的模板名称必须由Template Engine当前使用的Template Resolver解析。
    • ~{::selector}""~{this::selector}"包含同一模板的片段。

    双方templatenameselector在上面的例子可以是全功能的表达式(甚至条件语句!),如:

    <div th:insert="footer :: (${user.isAdmin}? #{footer.admin} : #{footer.normaluser})"></div>

    片段可以包括任何th:*属性。一旦片段被包含在目标模板(具有th:insertth:replaceattribute)的模板中,这些属性将被评估,并且它们将能够引用此目标模板中定义的任何上下文变量。

    这种分片方法的一大优点是,您可以将页面中的片段写入浏览器完美显示的页面,并具有完整而有效的标记结构,同时仍保留使Thymeleaf包含在其他模板中的功能。

  • 相关阅读:
    大话设计模式笔记(二十)の命令模式
    大话设计模式笔记(十九)の桥接模式
    大话设计模式笔记(十八)の单例模式
    大话设计模式笔记(十七)の迭代器模式
    反射的使用及其使用场景
    linq的简单使用
    XML的简单使用
    log4net的简单使用
    token
    axios在vue中的简单封装及应用
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6892810.html
Copyright © 2020-2023  润新知