Thymeleafテンプレートの使用とSpring Bootとの統合


詳細
次世代JavaテンプレートエンジンThymeleaf
参照先:http://www.tianmaying.com/tutorial/using-thymeleaf
http://blog.csdn.net/u012706811/article/details/52185345
 
Thymeleafは、XML/XHTML/HTML 5のコンテンツをレンダリングするためのテンプレートエンジンです.JSP,Velocity,FreeMakerなどと同様に,Spring MVCなどのWebフレームワークとWebアプリケーションのテンプレートエンジンとして容易に統合できる.他のテンプレートエンジンと比較して、Thymeleafの最大の特徴は、Webアプリケーション全体を起動することなく、ブラウザでテンプレートページを直接開き、正しく表示できることです.
 
1.導入依存
mavenに直接導入
 

      org.springframework.boot
      spring-boot-starter-thymeleaf
 
依存関係を見るとspring-boot-starter-thymeleafの下にspring-boot-starter-webが含まれているのでspring-boot-starter-webの依存を取り除くことができる.
2.ビュー解析器の構成
Spring-bootの多くの構成にはデフォルトの構成があります.例えば、デフォルトのページマッピングパスはclasspath:/templates/*です.html同様の静的ファイルパスはclasspath:/static/
アプリケーションでpropertiesではthymeleafテンプレート解析器の属性を構成することができる.springMVCを使用したJSP解析器構成のように
#thymeleaf start
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#       ,          
spring.thymeleaf.cache=false
#thymeleaf end

 
具体的に構成可能なパラメータは、org.springframework.boot.autoconfigure.thymeleaf.ThymeleafPropertiesというクラスを見ることができ、上記の構成は実際にはクラスに注入する属性値である.
3.DEMOの作成
1.コントローラ
    @Controller
    public class HelloController {

        private Logger logger = LoggerFactory.getLogger(HelloController.class);
        /**
         *   hello
         * @return
         */
        @RequestMapping(value = "/hello",method = RequestMethod.GET)
        public String hello(Model model) {
            model.addAttribute("name", "Dear");
            return "hello";
        }

    }

 
2.view(IDEAで生成されたインデックスとして注釈され、IDEA補完に便利)



    hello
    




3333


 
3.効果
Thymeleaf模板的使用及与Spring Boot的集成_第1张图片
4.基礎文法
上のDEMOを味わうと、まずhtmlタグを書き換えていることがわかります


このようにすれば、他のラベルにth:*という文法を使用することができる.これは次の文法の前提です.
1.変数値の取得

3333


取得変数の値は&符号である、javaBeanの場合は . 方式で取得されていることがわかる、これはEL式と同様である.
また$式はthタグの内部にしか書くことができない、そうでなければ発効しない.上記の例ではth:textタグの値をpタグの中の値に置き換えるが、pの中の元の値は先端開発時の展示用にすぎない.これで前後端の分離がうまくいった.
2.URLの導入
ThymeleafのURLに対する処理は構文@{…}で処理される
  パス
  パス
Contentパス、static のcssフォルダへのデフォルトアクセス

類似のラベルは、th:hrefth:srcです.
3.文字列置換
多くの場合、文字列の結合操作で完了するには、大きな文字のいずれかを置き換える必要があります.


より簡潔な方法は次のとおりです.


もちろんこの形式の制限は多く、|……|には変数式${...}しか含まれず、他の定数や条件式などは含まれません.
4.演算子
式では、+、-、*、/、%などの算術演算子を使用できます.
th:with="isEven=(${prodStat.count} % 2 == 0)"

論理演算子>,=,=,!=すべて使用できますが、唯一注意しなければならないのは、使用時にHTMLエスケープを使用する必要があることです.
    th:if="${prodStat.count} > 1"
    th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')"

5.条件
if/unless
Thymeleafではth:ifおよびth:unless属性を使用して条件判定を行います.次の例では、ラベルはth:ifで条件が成立した場合にのみ表示されます.
Login

th:unlessはth:ifとは正反対で、式の条件が成立しない限り、その内容が表示されます.
Switch
Thymeleafは同様に多重選択Switch構造をサポートする:

User is an administrator

User is a manager


デフォルトのプロパティdefaultは*で表すことができます.

User is an administrator

User is a manager

User is some other thing


6.サイクル
レンダーリストデータは、非常に一般的なシーンです.たとえば、th:eachラベルを使用して、1つのテーブルにレンダーする必要があるn個のレコードがあります.
 

  

Product list

NAME PRICE IN STOCK
Onions 2.41 yes

Return to home


ループレンダリングされる要素(ここでは)にth:eachラベルを追加する必要があることがわかります.ここで、th:each="prod:${prods}"は、集合変数prodsを遍歴することを意味し、ループ変数はprodがループ体で式でアクセスできることを意味します.
7.Utilities
テンプレートをより使いやすくするために、ThymeleafはContextに組み込まれた一連のUtilityオブジェクトを提供し、#から直接アクセスできます.
  • #dates
  • #calendars
  • #numbers
  • #strings
  • arrays
  • lists
  • sets
  • maps
  • ...次に、いくつかの一般的な方法を例に挙げるコードを使用します.
  • date
    /*
     * 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')}
    
    /*
     * 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()}

    string
    /*
     * 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)}
    
    /*
     * 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*
    
    /*
     * Compute length
     * Also works with arrays, lists or sets
     */
    ${#strings.length(str)}
    
    /*
     * Null-safe comparison and concatenation
     */
    ${#strings.equals(str)}
    ${#strings.equalsIgnoreCase(str)}
    ${#strings.concat(str)}
    ${#strings.concatReplaceNulls(str)}
    
    /*
     * Random
     */
    ${#strings.randomAlphanumeric(count)}

     
     
    補足
    spring-boot 1.4以降、thymeleaf 3をサポートする、バージョン番号を変更して修正サポートを行うことができる.3は2に比べて効率が大幅に向上し、ラベルを閉じる必要がなく、類似のlink、imgなどがサポートされており、以下のように構成すればよい.
      
        UTF-8
        
        3.0.0.RELEASE
        2.0.0
        
        1.8