Thymeleaf语法,使用范例

  • url传参数:
th:href="@{/gaara(pid=1,id=${person.id})}"
这里需要注意,在模板转化的时候会将这个 ()  自动转换成一个?   类似  xxx?xxx=ssss
  • onclick传参数 必须按着这个写
<button class="btn" th:onclick="'getName(\'' + ${person.name} + '\');'">获得名字</button> 
  • post+form写法:
@RequestMapping("/test")
public String messages(User user) {
     ...
    return "redirect:/post/path";   //跳转到path所在controller处理
    }
<form th:action="@{/test}" th:object="${user}" th:method="post" >
    <input  type="text" th:filed="*{name}" />  //filed 见下方
    <input type="submit" />
</form>
  • 传值给js
 model.addAttribute("message", "hello");
    return "index";
    }
<script th:inline="javascript">
    var message = [[${message}]];
    // 这里有个很强大的功能 [[${message}]] 可以直接放在任何地方充当字符
    var message = “[[${message}]]”;
    console.log(message);
</script>
th:inline="javascript">
当这样写时,[[${message}]]会自动带上双引号,如果不写,则写啥时啥,
比如:
<script type="text/javascript">
"openId":"[[${openId}]]"
<script th:inline="javascript">
"openId":[[${openId}]]
  • 操作对象:
User user = UserDao.getUser();
<input th:id="${user.name}" th:name="${user.name}" th:value="${user.name}" />
//或者
<div th:object="${user}">
    <input  th:id="*{name}"   />
    <input  th:id="*{age}"   />
</div>
  • 时间对象:
Date mytime = new Date();
<input  th:id="*{#dates.format(mytime,'yyyy-MM-dd HH:mm:ss')}"   />
  • 循环集合对象:
List<String> users = new ArrayList<>();

<tr th:each="user:${users}">  //以user为基本单元
    <td th:text="${user.name}"></td>
    <td th:text="${user.age}"></td>
</tr>
  • 复杂循环:
主yml:
Spring.messages.basename=roles
Spring.messages.cache-seconds=3600
Spring.messages.encoding=UTF-8
roles.properties文件:
roles.manage=b
roles.superadmin=c
<div th:switch="${user.name}">
    <p th:case=" 'a' "> 这是A </p>
    <p th:case="${roles.manage}"> 这是manage </p>
    <p th:case=" ${roles.superadmin} "> 这是admin </p>
     <p th:case="*"> 这是其他 </p>
</div>
  • 普通文本和富文本:
user.set("ha","<font>hahahahahahahaha</font>");
<div  th:text="${ha}"></div>  普通
<div  th:utext="${ha}"></div> 富文本
  • 网址写法:
<a th:href="@{http://xxx.xx.com}"></a>
  • 引入js css:
<script  th:src="@{/static/js/xxx/js}"  />
<link th:href="@{/static/css/xxx.css}" />
在resource目录下的static文件夹里
  • filed:
 <input  type="text" th:filed="*{name}" /> 
 等同于
  <input  type="text" th:id="*{name}" th:name="*{name}" th:value="*{name}" /> 
  • 判断:
<div  th:if="${user.age} == 18"  > 18</div>
<div  th:if="${user.age} gt 18"  > 18+</div>
<div  th:if="${user.age} lt 18"  > 18-</div>
<div  th:if="${user.age} ge 18"  > 18+=</div>
<div  th:if="${user.age} le 18"  > 18-+</div>
只显示符合条件的
  • 复杂判断选项的时候可以用循环判断:
<div class="agile-info" th:switch="${error_code}">
    <h3>SORRY</h3>
    <h2  th:case="403"> 403</h2>
    <h2  th:case="402"> 402</h2>
    <h2  th:case="*" > 404</h2>
    <p>Unfortunately, you do not have permission to access this page.</p>
</div>
  • 选择框:
<select> 
<option th:selectde="${user.name eq 'sss'}"> sss </option>
<option th:selectde="${user.name eq 'xxx'}"> sss </option>
</select>
会默认为sss
  • Ajax的写法 :
<script type="text/javascript" th:inline="javascript">
    /*<![CDATA[*/ 
    function ajaxSubmit(){
        var songName = $("#songName").val(); 
        var singer = $("#singer").val();
        $.ajax({ 
            url: [[@{/song/gaara}]], 
            type: 'post', 
            dataType: 'json', 
            contentType: 'application/json', 
            data: JSON.stringify({songName : songName,singer : singer}), 
            async: true, 
            success: function(data){ 
                if(data != null){ 
                    alert('flag : ' + data.flag + " , hintMessage : " + data.hintMessage); 
                } 
            } 
        }); 
    } 
    /*]]>*/ 
</script>​
  • js使用对象:
  <SCRIPT th:inline="javascript">
      // Morris donut chart
      Morris.Donut({
          element: 'browser-usage',
          data: [
              {label: "used", value: [[${free.used}]]},
              {label: "free", value: [[${free.free}]]},
              {label: "shared", value: [[${free.shared}]]},
              {label: "cache", value: [[${free.cache}]]},
              {label: "availabl", value: [[${free.availabl}]]},
          ],
          colors: ['#00a3d8', '#2fbbe8', '#72cae7', '#d9544f', '#ffc100']
      });
  </SCRIPT> 
 ​
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351