zoukankan      html  css  js  c++  java
  • SpringBoot学习之 Thymeleaf

    在学习SpringBoot Web应用开发之前,我们都是通过@RestController 来处理请求,所返回的内容为json对象。如果返回html页面,则用@Controller直接请求,匹配请求为 @RequestMapping("/")

    @Controller
    public class HelloController {
        
        @ResponseBody
        @RequestMapping("/hello")
        public String hello() {
            return "Hello World";
        }
        
        @RequestMapping("/")
        public String index(ModelMap map) {
            map.addAttribute("host", "我是yaohuiqin");
            return "index";
        }
    }
    

      

    模板引擎:

      在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,完美可以很快的上手开发动态网站。

      SpringBoot建议使用模板引擎,避免使用JSP,若一定使用JSP将无法实现SpringBoot的多种性能。

      常见的模板引擎:

    • Thymeleaf
    • FreeMarker
    • Velocity
    • Groovy
    • Mustache

      默认的模板配置路径为:src/main/resource/templates.

    Thymeleaf:

      Thymeleaf 是一个XML/XHTML/HTML5模板引擎,可以用于Web与非Web环境中的应用开发。它提供了一个用于整合Spring Mvc 的可选模块,在应用开发中,你可以使用Theamleaf来完全代替JSP或其他模板引擎。如Velocity。  Thymeleaf的目标是提供一种可被浏览器正确显示的,格式良好的模板创建方式,因为也可以称作静态建模。

    例如:

    <table>
      <thead>
        <tr>
          <th th:text="#{msgs.headers.name}">Name</td>
          <th th:text="#{msgs.headers.price}">Price</td>
        </tr>
      </thead>
      <tbody>
        <tr th:each="prod : ${allProducts}">
          <td th:text="${prod.name}">Oranges</td>
          <td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td>
        </tr>
      </tbody>
    </table>
    

     在Spring Boot中使用Thymeleaf,只需要引入下面依赖,并在默认的模板路径src/main/resources/templates下编写模板文件即可完成。

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

      

      相关的属性配置:

    # Enable template caching.
    spring.thymeleaf.cache=true 
    # Check that the templates location exists.
    spring.thymeleaf.check-template-location=true 
    # Content-Type value.
    spring.thymeleaf.content-type=text/html 
    # Enable MVC Thymeleaf view resolution.
    spring.thymeleaf.enabled=true 
    # Template encoding.
    spring.thymeleaf.encoding=UTF-8 
    # Comma-separated list of view names that should be excluded from resolution.
    spring.thymeleaf.excluded-view-names= 
    # Template mode to be applied to templates. See also StandardTemplateModeHandlers.
    spring.thymeleaf.mode=HTML5 
    # Prefix that gets prepended to view names when building a URL.
    spring.thymeleaf.prefix=classpath:/templates/ 
    # Suffix that gets appended to view names when building a URL.
    spring.thymeleaf.suffix=.html  spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain. spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.
    

      

    常用th标签都有那些?
    
    关键字      功能介绍        案例
    th:id      替换id          <input th:id="'xxx' + ${collect.id}"/>
    th:text     文本替换        <p th:text="${collect.description}">description</p>
    th:utext    支持html的文本替换   <p th:utext="${htmlcontent}">conten</p>
    th:object    替换对象        <div th:object="${session.user}">
    th:value    属性赋值        <input th:value="${user.name}" />
    th:with    变量赋值运算        <div th:with="isEven=${prodStat.count}%2==0"></div>
    th:style    设置样式            th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"
    th:onclick    点击事件          th:onclick="'getCollect()'"
    th:each    属性赋值            tr th:each="user,userStat:${users}">
    th:if    判断条件            <a th:if="${userId == collect.userId}" >
    th:unless    和th:if判断相反        <a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
    th:href    链接地址              <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> />
    th:switch    多路选择 配合th:case 使用    <div th:switch="${user.role}">
    th:case    th:switch的一个分支        <p th:case="'admin'">User is an administrator</p>
    th:fragment    布局标签,定义一个代码片段,方便其它地方引用    <div th:fragment="alert">
    th:include    布局标签,替换内容到引入的文件    <head th:include="layout :: htmlhead" th:with="title='xx'"></head> />
    th:replace    布局标签,替换整个标签到引入的文件    <div th:replace="fragments/header :: title"></div>
    th:selected    selected选择框 选中    th:selected="(${xxx.id} == ${configObj.dd})"
    th:src    图片类地址引入          <img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />
    th:inline    定义js脚本可以使用变量    <script type="text/javascript" th:inline="javascript">
    th:action    表单提交的地址        <form action="subscribe.html" th:action="@{/subscribe}">
    th:remove    删除某个属性        <tr th:remove="all"> 
                        1.all:删除包含标签和所有的孩子。
                        2.body:不包含标记删除,但删除其所有的孩子。
                        3.tag:包含标记的删除,但不删除它的孩子。
                        4.all-but-first:删除所有包含标签的孩子,除了第一个。
                        5.none:什么也不做。这个值是有用的动态评估。
    th:attr    设置标签属性,多个属性可以用逗号分隔    比如 th:attr="src=@{/image/aa.jpg},title=#{logo}",此标签不太优雅,一般用的比较少。
    

      

  • 相关阅读:
    ACM: POJ 1401 Factorial-数论专题-水题
    ACM:POJ 2739 Sum of Consecutive Prime Numbers-素数打表-尺取法
    ACM: HDU 1028 Ignatius and the Princess III-DP
    ACM: HDU 2563 统计问题-DFS+打表
    ACM: How many integers can you find-数论专题-容斥原理的简单应用+GCD
    ACM: Happy 2004-数论专题-因子求和-快速幂
    ACM:a^b%p-数论-快速幂-快速乘
    ACM: 强化训练-Beautiful People-最长递增子序列变形-DP
    POJ 1472 Instant Complexity 应该叫它编程题。。
    POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题
  • 原文地址:https://www.cnblogs.com/yaohuiqin/p/9365080.html
Copyright © 2011-2022 走看看