• thymeleaf学习


    一.简单表达格式:   thymeleaf的官方参考文档

      1.变量的表达式:${...}

      2.选择变量表达式:*{...}

      3.信息表达:#{...}

      4.链接URL表达式:@{...}

    二.字面值

      1.文本文字:'one text', 'Another one!',…

      2.文字数量:0, 34, 3.0, 12.3,…

      3.布尔型常量true, false

      4.空的文字:null

      5.文字标记:one, sometext, main,…

    四:文本处理

      1.字符串并置:+

      2.文字替换:|The name is ${name}|

    五.表达基本对象

      1.#ctx:上下文对象

      2.#vars:上下文变量

      3.#locale:上下文语言环境

      4.#httpServletRequest:(只有在Web上下文)HttpServletRequest对象

      5.#httpSession:(只有在Web上下文)HttpSession对象。

    用法:

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

    六.实用表达对象 

    • #dates: java.util的实用方法。对象:日期格式、组件提取等.
    • #calendars: 类似于#日期,但对于java.util。日历对象
    • #numbers: 格式化数字对象的实用方法。
    • #strings:字符串对象的实用方法:包含startsWith,将/附加等。
    • #objects: 实用方法的对象。
    • #bools: 布尔评价的实用方法。
    • #arrays: 数组的实用方法。
    • #lists: list集合。
    • #sets:set集合。
    • #maps: map集合。
    • #aggregates: 实用程序方法用于创建聚集在数组或集合.
    • #messages: 实用程序方法获取外部信息内部变量表达式,以同样的方式,因为他们将获得使用# {…}语法
    • #ids: 实用程序方法来处理可能重复的id属性(例如,由于迭代)。
      Dates
      
      #dates : utility methods for java.util.Date objects:
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Dates
       * ======================================================================
       */
      
      /*
       * Null-safe toString()
       */
      ${#strings.toString(obj)}                           // also array*, list* and set*
      
      /*
       * Format date with the standard locale format
       * Also works with arrays, lists or sets
       */
      ${#dates.format(date)}
      ${#dates.arrayFormat(datesArray)}
      ${#dates.listFormat(datesList)}
      ${#dates.setFormat(datesSet)}
      
      /*
       * Format date with the specified pattern
       * Also works with arrays, lists or sets
       */
      ${#dates.format(date, 'dd/MMM/yyyy HH:mm')}
      ${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}
      ${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}
      ${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}
      
      /*
       * Obtain date properties
       * Also works with arrays, lists or sets
       */
      ${#dates.day(date)}                    // also arrayDay(...), listDay(...), etc.
      ${#dates.month(date)}                  // also arrayMonth(...), listMonth(...), etc.
      ${#dates.monthName(date)}              // also arrayMonthName(...), listMonthName(...), etc.
      ${#dates.monthNameShort(date)}         // also arrayMonthNameShort(...), listMonthNameShort(...), etc.
      ${#dates.year(date)}                   // also arrayYear(...), listYear(...), etc.
      ${#dates.dayOfWeek(date)}              // also arrayDayOfWeek(...), listDayOfWeek(...), etc.
      ${#dates.dayOfWeekName(date)}          // also arrayDayOfWeekName(...), listDayOfWeekName(...), etc.
      ${#dates.dayOfWeekNameShort(date)}     // also arrayDayOfWeekNameShort(...), listDayOfWeekNameShort(...), etc.
      ${#dates.hour(date)}                   // also arrayHour(...), listHour(...), etc.
      ${#dates.minute(date)}                 // also arrayMinute(...), listMinute(...), etc.
      ${#dates.second(date)}                 // also arraySecond(...), listSecond(...), etc.
      ${#dates.millisecond(date)}            // also arrayMillisecond(...), listMillisecond(...), etc.
      
      /*
       * Create date (java.util.Date) objects from its components
       */
      ${#dates.create(year,month,day)}
      ${#dates.create(year,month,day,hour,minute)}
      ${#dates.create(year,month,day,hour,minute,second)}
      ${#dates.create(year,month,day,hour,minute,second,millisecond)}
      
      /*
       * Create a date (java.util.Date) object for the current date and time
       */
      ${#dates.createNow()}
      
      /*
       * Create a date (java.util.Date) object for the current date (time set to 00:00)
       */
      ${#dates.createToday()}
      Calendars
      
      #calendars : analogous to #dates, but for java.util.Calendar objects:
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Calendars
       * ======================================================================
       */
      
      /*
       * Format calendar with the standard locale format
       * Also works with arrays, lists or sets
       */
      ${#calendars.format(cal)}
      ${#calendars.arrayFormat(calArray)}
      ${#calendars.listFormat(calList)}
      ${#calendars.setFormat(calSet)}
      
      /*
       * Format calendar with the specified pattern
       * Also works with arrays, lists or sets
       */
      ${#calendars.format(cal, 'dd/MMM/yyyy HH:mm')}
      ${#calendars.arrayFormat(calArray, 'dd/MMM/yyyy HH:mm')}
      ${#calendars.listFormat(calList, 'dd/MMM/yyyy HH:mm')}
      ${#calendars.setFormat(calSet, 'dd/MMM/yyyy HH:mm')}
      
      /*
       * Obtain calendar properties
       * Also works with arrays, lists or sets
       */
      ${#calendars.day(date)}                // also arrayDay(...), listDay(...), etc.
      ${#calendars.month(date)}              // also arrayMonth(...), listMonth(...), etc.
      ${#calendars.monthName(date)}          // also arrayMonthName(...), listMonthName(...), etc.
      ${#calendars.monthNameShort(date)}     // also arrayMonthNameShort(...), listMonthNameShort(...), etc.
      ${#calendars.year(date)}               // also arrayYear(...), listYear(...), etc.
      ${#calendars.dayOfWeek(date)}          // also arrayDayOfWeek(...), listDayOfWeek(...), etc.
      ${#calendars.dayOfWeekName(date)}      // also arrayDayOfWeekName(...), listDayOfWeekName(...), etc.
      ${#calendars.dayOfWeekNameShort(date)} // also arrayDayOfWeekNameShort(...), listDayOfWeekNameShort(...), etc.
      ${#calendars.hour(date)}               // also arrayHour(...), listHour(...), etc.
      ${#calendars.minute(date)}             // also arrayMinute(...), listMinute(...), etc.
      ${#calendars.second(date)}             // also arraySecond(...), listSecond(...), etc.
      ${#calendars.millisecond(date)}        // also arrayMillisecond(...), listMillisecond(...), etc.
      
      /*
       * Create calendar (java.util.Calendar) objects from its components
       */
      ${#calendars.create(year,month,day)}
      ${#calendars.create(year,month,day,hour,minute)}
      ${#calendars.create(year,month,day,hour,minute,second)}
      ${#calendars.create(year,month,day,hour,minute,second,millisecond)}
      
      /*
       * Create a calendar (java.util.Calendar) object for the current date and time
       */
      ${#calendars.createNow()}
      
      /*
       * Create a calendar (java.util.Calendar) object for the current date (time set to 00:00)
       */
      ${#calendars.createToday()}
      Numbers
      
      #numbers : utility methods for number objects:
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Numbers
       * ======================================================================
       */
      
      /*
       * ==========================
       * Formatting integer numbers
       * ==========================
       */
      
      /* 
       * Set minimum integer digits.
       * Also works with arrays, lists or sets
       */
      ${#numbers.formatInteger(num,3)}
      ${#numbers.arrayFormatInteger(numArray,3)}
      ${#numbers.listFormatInteger(numList,3)}
      ${#numbers.setFormatInteger(numSet,3)}
      
      
      /* 
       * Set minimum integer digits and thousands separator: 
       * 'POINT', 'COMMA', 'NONE' or 'DEFAULT' (by locale).
       * Also works with arrays, lists or sets
       */
      ${#numbers.formatInteger(num,3,'POINT')}
      ${#numbers.arrayFormatInteger(numArray,3,'POINT')}
      ${#numbers.listFormatInteger(numList,3,'POINT')}
      ${#numbers.setFormatInteger(numSet,3,'POINT')}
      
      
      /*
       * ==========================
       * Formatting decimal numbers
       * ==========================
       */
      
      /*
       * Set minimum integer digits and (exact) decimal digits.
       * Also works with arrays, lists or sets
       */
      ${#numbers.formatDecimal(num,3,2)}
      ${#numbers.arrayFormatDecimal(numArray,3,2)}
      ${#numbers.listFormatDecimal(numList,3,2)}
      ${#numbers.setFormatDecimal(numSet,3,2)}
      
      /*
       * Set minimum integer digits and (exact) decimal digits, and also decimal separator.
       * Also works with arrays, lists or sets
       */
      ${#numbers.formatDecimal(num,3,2,'COMMA')}
      ${#numbers.arrayFormatDecimal(numArray,3,2,'COMMA')}
      ${#numbers.listFormatDecimal(numList,3,2,'COMMA')}
      ${#numbers.setFormatDecimal(numSet,3,2,'COMMA')}
      
      /*
       * Set minimum integer digits and (exact) decimal digits, and also thousands and 
       * decimal separator.
       * Also works with arrays, lists or sets
       */
      ${#numbers.formatDecimal(num,3,'POINT',2,'COMMA')}
      ${#numbers.arrayFormatDecimal(numArray,3,'POINT',2,'COMMA')}
      ${#numbers.listFormatDecimal(numList,3,'POINT',2,'COMMA')}
      ${#numbers.setFormatDecimal(numSet,3,'POINT',2,'COMMA')}
      
      
      
      /*
       * ==========================
       * Utility methods
       * ==========================
       */
      
      /*
       * Create a sequence (array) of integer numbers going
       * from x to y
       */
      ${#numbers.sequence(from,to)}
      ${#numbers.sequence(from,to,step)}
      Strings
      
      #strings : utility methods for String objects:
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Strings
       * ======================================================================
       */
      
      /*
       * Check whether a String is empty (or null). Performs a trim() operation before check
       * Also works with arrays, lists or sets
       */
      ${#strings.isEmpty(name)}
      ${#strings.arrayIsEmpty(nameArr)}
      ${#strings.listIsEmpty(nameList)}
      ${#strings.setIsEmpty(nameSet)}
      
      /*
       * Perform an 'isEmpty()' check on a string and return it if false, defaulting to
       * another specified string if true.
       * Also works with arrays, lists or sets
       */
      ${#strings.defaultString(text,default)}
      ${#strings.arrayDefaultString(textArr,default)}
      ${#strings.listDefaultString(textList,default)}
      ${#strings.setDefaultString(textSet,default)}
      
      /*
       * Check whether a fragment is contained in a String
       * Also works with arrays, lists or sets
       */
      ${#strings.contains(name,'ez')}                     // also array*, list* and set*
      ${#strings.containsIgnoreCase(name,'ez')}           // also array*, list* and set*
      
      /*
       * Check whether a String starts or ends with a fragment
       * Also works with arrays, lists or sets
       */
      ${#strings.startsWith(name,'Don')}                  // also array*, list* and set*
      ${#strings.endsWith(name,endingFragment)}           // also array*, list* and set*
      
      /*
       * Substring-related operations
       * Also works with arrays, lists or sets
       */
      ${#strings.indexOf(name,frag)}                      // also array*, list* and set*
      ${#strings.substring(name,3,5)}                     // also array*, list* and set*
      ${#strings.substringAfter(name,prefix)}             // also array*, list* and set*
      ${#strings.substringBefore(name,suffix)}            // also array*, list* and set*
      ${#strings.replace(name,'las','ler')}               // also array*, list* and set*
      
      /*
       * Append and prepend
       * Also works with arrays, lists or sets
       */
      ${#strings.prepend(str,prefix)}                     // also array*, list* and set*
      ${#strings.append(str,suffix)}                      // also array*, list* and set*
      
      /*
       * Change case
       * Also works with arrays, lists or sets
       */
      ${#strings.toUpperCase(name)}                       // also array*, list* and set*
      ${#strings.toLowerCase(name)}                       // also array*, list* and set*
      
      /*
       * Split and join
       */
      ${#strings.arrayJoin(namesArray,',')}
      ${#strings.listJoin(namesList,',')}
      ${#strings.setJoin(namesSet,',')}
      ${#strings.arraySplit(namesStr,',')}                // returns String[]
      ${#strings.listSplit(namesStr,',')}                 // returns List<String>
      ${#strings.setSplit(namesStr,',')}                  // returns Set<String>
      
      /*
       * Trim
       * Also works with arrays, lists or sets
       */
      ${#strings.trim(str)}                               // also array*, list* and set*
      
      /*
       * Compute length
       * Also works with arrays, lists or sets
       */
      ${#strings.length(str)}                             // also array*, list* and set*
      
      /*
       * Abbreviate text making it have a maximum size of n. If text is bigger, it
       * will be clipped and finished in "..."
       * Also works with arrays, lists or sets
       */
      ${#strings.abbreviate(str,10)}                      // also array*, list* and set*
      
      /*
       * Convert the first character to upper-case (and vice-versa)
       */
      ${#strings.capitalize(str)}                         // also array*, list* and set*
      ${#strings.unCapitalize(str)}                       // also array*, list* and set*
      
      /*
       * Convert the first character of every word to upper-case
       */
      ${#strings.capitalizeWords(str)}                    // also array*, list* and set*
      ${#strings.capitalizeWords(str,delimiters)}         // also array*, list* and set*
      
      /*
       * Escape the string
       */
      ${#strings.escapeXml(str)}                          // also array*, list* and set*
      ${#strings.escapeJava(str)}                         // also array*, list* and set*
      ${#strings.escapeJavaScript(str)}                   // also array*, list* and set*
      ${#strings.unescapeJava(str)}                       // also array*, list* and set*
      ${#strings.unescapeJavaScript(str)}                 // also array*, list* and set*
      
      /*
       * Null-safe comparison and concatenation
       */
      ${#strings.equals(str)}
      ${#strings.equalsIgnoreCase(str)}
      ${#strings.concat(str)}
      ${#strings.concatReplaceNulls(str)}
      
      /*
       * Random
       */
      ${#strings.randomAlphanumeric(count)}
      Objects
      
      #objects : utility methods for objects in general
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Objects
       * ======================================================================
       */
      
      /*
       * Return obj if it is not null, and default otherwise
       * Also works with arrays, lists or sets
       */
      ${#objects.nullSafe(obj,default)}
      ${#objects.arrayNullSafe(objArray,default)}
      ${#objects.listNullSafe(objList,default)}
      ${#objects.setNullSafe(objSet,default)}
      Booleans
      
      #bools : utility methods for boolean evaluation
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Bools
       * ======================================================================
       */
      
      /*
       * Evaluate a condition in the same way that it would be evaluated in a th:if tag
       * (see conditional evaluation chapter afterwards).
       * Also works with arrays, lists or sets
       */
      ${#bools.isTrue(obj)}
      ${#bools.arrayIsTrue(objArray)}
      ${#bools.listIsTrue(objList)}
      ${#bools.setIsTrue(objSet)}
      
      /*
       * Evaluate with negation
       * Also works with arrays, lists or sets
       */
      ${#bools.isFalse(cond)}
      ${#bools.arrayIsFalse(condArray)}
      ${#bools.listIsFalse(condList)}
      ${#bools.setIsFalse(condSet)}
      
      /*
       * Evaluate and apply AND operator
       * Receive an array, a list or a set as parameter
       */
      ${#bools.arrayAnd(condArray)}
      ${#bools.listAnd(condList)}
      ${#bools.setAnd(condSet)}
      
      /*
       * Evaluate and apply OR operator
       * Receive an array, a list or a set as parameter
       */
      ${#bools.arrayOr(condArray)}
      ${#bools.listOr(condList)}
      ${#bools.setOr(condSet)}
      Arrays
      
      #arrays : utility methods for arrays
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Arrays
       * ======================================================================
       */
      
      /*
       * Converts to array, trying to infer array component class.
       * Note that if resulting array is empty, or if the elements
       * of the target object are not all of the same class,
       * this method will return Object[].
       */
      ${#arrays.toArray(object)}
      
      /*
       * Convert to arrays of the specified component class.
       */
      ${#arrays.toStringArray(object)}
      ${#arrays.toIntegerArray(object)}
      ${#arrays.toLongArray(object)}
      ${#arrays.toDoubleArray(object)}
      ${#arrays.toFloatArray(object)}
      ${#arrays.toBooleanArray(object)}
      
      /*
       * Compute length
       */
      ${#arrays.length(array)}
      
      /*
       * Check whether array is empty
       */
      ${#arrays.isEmpty(array)}
      
      /*
       * Check if element or elements are contained in array
       */
      ${#arrays.contains(array, element)}
      ${#arrays.containsAll(array, elements)}
      Lists
      
      #lists : utility methods for lists
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Lists
       * ======================================================================
       */
      
      /*
       * Converts to list
       */
      ${#lists.toList(object)}
      
      /*
       * Compute size
       */
      ${#lists.size(list)}
      
      /*
       * Check whether list is empty
       */
      ${#lists.isEmpty(list)}
      
      /*
       * Check if element or elements are contained in list
       */
      ${#lists.contains(list, element)}
      ${#lists.containsAll(list, elements)}
      
      /*
       * Sort a copy of the given list. The members of the list must implement
       * comparable or you must define a comparator.
       */
      ${#lists.sort(list)}
      ${#lists.sort(list, comparator)}
      Sets
      
      #sets : utility methods for sets
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Sets
       * ======================================================================
       */
      
      /*
       * Converts to set
       */
      ${#sets.toSet(object)}
      
      /*
       * Compute size
       */
      ${#sets.size(set)}
      
      /*
       * Check whether set is empty
       */
      ${#sets.isEmpty(set)}
      
      /*
       * Check if element or elements are contained in set
       */
      ${#sets.contains(set, element)}
      ${#sets.containsAll(set, elements)}
      Maps
      
      #maps : utility methods for maps
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Maps
       * ======================================================================
       */
      
      /*
       * Compute size
       */
      ${#maps.size(map)}
      
      /*
       * Check whether map is empty
       */
      ${#maps.isEmpty(map)}
      
      /*
       * Check if key/s or value/s are contained in maps
       */
      ${#maps.containsKey(map, key)}
      ${#maps.containsAllKeys(map, keys)}
      ${#maps.containsValue(map, value)}
      ${#maps.containsAllValues(map, value)}
      Aggregates
      
      #aggregates : utility methods for creating aggregates on arrays or collections
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Aggregates
       * ======================================================================
       */
      
      /*
       * Compute sum. Returns null if array or collection is empty
       */
      ${#aggregates.sum(array)}
      ${#aggregates.sum(collection)}
      
      /*
       * Compute average. Returns null if array or collection is empty
       */
      ${#aggregates.avg(array)}
      ${#aggregates.avg(collection)}
      Messages
      
      #messages : utility methods for obtaining externalized messages inside variables expressions, in the same way as they would be obtained using #{...} syntax.
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Messages
       * ======================================================================
       */
      
      /*
       * Obtain externalized messages. Can receive a single key, a key plus arguments,
       * or an array/list/set of keys (in which case it will return an array/list/set of 
       * externalized messages).
       * If a message is not found, a default message (like '??msgKey??') is returned.
       */
      ${#messages.msg('msgKey')}
      ${#messages.msg('msgKey', param1)}
      ${#messages.msg('msgKey', param1, param2)}
      ${#messages.msg('msgKey', param1, param2, param3)}
      ${#messages.msgWithParams('msgKey', new Object[] {param1, param2, param3, param4})}
      ${#messages.arrayMsg(messageKeyArray)}
      ${#messages.listMsg(messageKeyList)}
      ${#messages.setMsg(messageKeySet)}
      
      /*
       * Obtain externalized messages or null. Null is returned instead of a default
       * message if a message for the specified key is not found.
       */
      ${#messages.msgOrNull('msgKey')}
      ${#messages.msgOrNull('msgKey', param1)}
      ${#messages.msgOrNull('msgKey', param1, param2)}
      ${#messages.msgOrNull('msgKey', param1, param2, param3)}
      ${#messages.msgOrNullWithParams('msgKey', new Object[] {param1, param2, param3, param4})}
      ${#messages.arrayMsgOrNull(messageKeyArray)}
      ${#messages.listMsgOrNull(messageKeyList)}
      ${#messages.setMsgOrNull(messageKeySet)}
      IDs
      
      #ids : utility methods for dealing with id attributes that might be repeated (for example, as a result of an iteration).
      /*
       * ======================================================================
       * See javadoc API for class org.thymeleaf.expression.Ids
       * ======================================================================
       */
      
      /*
       * Normally used in th:id attributes, for appending a counter to the id attribute value
       * so that it remains unique even when involved in an iteration process.
       */
      ${#ids.seq('someId')}
      
      /*
       * Normally used in th:for attributes in <label> tags, so that these labels can refer to Ids
       * generated by means if the #ids.seq(...) function.
       *
       * Depending on whether the <label> goes before or after the element with the #ids.seq(...)
       * function, the "next" (label goes before "seq") or the "prev" function (label goes after 
       * "seq") function should be called.
       */
      ${#ids.next('someId')}
      ${#ids.prev('someId')}

    七.thymeleaf的$和*的区别:

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

    这等同于如下方式:

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

    也可以混用,如下:

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

    当一个对象的选择,选择的对象将也可用美元作为#对象表达变量表达式:

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

    如果没有执行对象选择,美元和星号语法是完全等价的:

    <div>
      <p>Name: <span th:text="*{session.user.name}">Sebastian</span>.</p>
      <p>Surname: <span th:text="*{session.user.surname}">Pepper</span>.</p>
      <p>Nationality: <span th:text="*{session.user.nationality}">Saturn</span>.</p>
    </div>
  • 相关阅读:
    Netty学习路线总结
    Intellij IDEA 快捷键整理-鬼畜版(全键盘开发指南)
    httpClient
    [翻译]Javaslang 介绍
    Docker学习<一>--初体验Windows环境下安装
    Spring @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
    IntelliJ IDEA 2016.2激活方法
    解决mac升级后,出现的 xcrun: error: invalid active developer path, missing xcrun 错误
    Logstash 安装与配置
    【JVM学习笔记】双亲委托机制存在的意义
  • 原文地址:https://www.cnblogs.com/suncj/p/4028768.html
Copyright © 2020-2023  润新知