当前位置: 首页 > news >正文

Thymeleaf系列五 迭代,if,switch语法

 

1. 概述

这里介绍thymeleaf的编程语法,本节主要包括如下内容

  1. 迭代语法:th:each; iteration status
  2. 条件语法:th:if; th:unless
  3. switch语法:th:switch; th:case; *

下文演示以上语法的用法。

2. 演示以上语法的用法

2.1. 公共类

User

public class User {
    private String name; private boolean isAdmin; private String other; private int age; public User(String name, boolean isAdmin, String other, int age) { super(); this.name = name; this.isAdmin = isAdmin; this.other = other; this.age = age; } // set/get略 } 

ProgrammingCtl : control类

@Controller
@RequestMapping("/programming")
public class ProgrammingCtl { @RequestMapping("programming") public String iteration(ModelMap modeMap) { // Iteration List<User> userList = new ArrayList<User>(); userList.add(new User("son_1", true, "other_1", 11)); userList.add(new User("son_2", false, "other_2", 22)); userList.add(new User("son_3", true, "other_3", 33)); userList.add(new User("son_4", false, "other_4", 44)); modeMap.put("userList", userList); // ifelse User userIf = new User("admin", true, "other_if", 11); modeMap.put("user", userIf); return "programming/programming"; } } 

本请求转到页面programming.html,

2.2. 迭代语法:th:each; iteration status

常用th:each用法:

<table border="2">
    <thead> <tr> <th>name</th> <th>age</th> <th>isAdmin</th> </tr> </thead> <tbody> <!-- 常用的迭代 th:each 用法 --> <tr th:each="user : ${userList}"> <td th:text="${user.name}"></td> <td th:text="${user.age}"></td> <td th:text="${user.isAdmin}"></td> </tr> </tbody> </table> 

运行结果如下: 
这里写图片描述

迭代的对象 
本例子中迭代的对象是java.util.List,除了List,还可以对以下对象进行迭代

  • java.util.Iterable
  • java.util.Enumeration
  • java.util.Iterator
  • java.util.Map,此时迭代返回的对象是java.util.Map.Entry
  • 数组

获取迭代的中间的状态,定义在iterStat中

在迭代过程中,可以获取迭代的中间状态,详细如下:

  • index :当前节点的索引,从0开始
  • size : 迭代节点总数
  • even/odd:当前是偶数/奇数行,boolean值
  • first/last:当前是每天/最后一个元素
<t
able border="2">
    <thead> <tr> <th>迭代索引</th> <th>元素所处的位置索引</th> <th>奇偶行</th> <th>name</th> <th>age</th> <th>isAdmin</th> </tr> </thead> <tbody> <!-- 获取迭代的中间的状态,定义在iterStat中--> <tr th:each="user,iterStat : ${userList}"> <!-- index: 当前迭代的索引 --> <td th:text="${iterStat.index }"></td> <!-- first: 当前元素是第一个元素; last: 当前元素是最后个元素 --> <td th:text="${iterStat.first } ? '这是第一个元素':(${iterStat.last} ? '这是最后一个元素':'')" ></td> <!-- --> <td th:text="${iterStat.odd} ? 'odd' : 'even'" ></td> <td th:text="${user.name}"></td> <td th:text="${user.age}"></td> <td th:text="${user.isAdmin}"></td> </tr> </tbody> </table> 

运行结果如下: 
这里写图片描述

2.3. 条件语法:th:if; th:unless

演示如下功能

  • th:if:如果值是true,则打印整个节点
  • th:unless: 和th:if是相反功能,如果值为false,则打印整个节点
    <!-- th:if:如果值是true,则打印<span>整个节点  -->
    <span th:if="${user.isAdmin}" th:text="${user.name} + '是管理员'"> </span><br /> <!-- th:unless: 和th:if是相反功能,如果值为false,则打印<span>整个节点 --> <span th:unless="not ${user.isAdmin}" th:text="${user.name} + '是管理员'"> </span><br />

输出:

<span>admin是管理员</span><br /> <span>admin是管理员</span><br /> 

th:if条件判断 
除了判断boolean值外,thymeleaf还认为如下表达式为true:

  • 值非空
  • 值是character,但是非0
  • 值是非0数字
  • 值是字符串,但是不是 “false”, “off” or “no”
  • 值不是boolean值,数字,character 或 字符串

2.4. switch语法:th:switch; th:case; *

演示如下功能

  • th:switch / th:case
  • th:case=”*” : 类似switch中的default
<!-- th:switch / th:case -->
<div th:switch="${user.name}"> <p th:case="'admin'">User is an administrator</p> <!-- *: case的默认的选项 --> <p th:case="*">User is some other thing</p> </div> 

输出:

<div>
  <p>User is an administrator</p> </div>

4.1算术操作符

+, -, *, /, %
e.g.

[html]  view plain  copy
 
  1. <div>  
  2.         <ol>  
  3.                 <li>+:1+1=<span th:text="1+1">1+1</span>.</li>  
  4.                 <li>-: 2-1=<span th:text="2-1">2-1</span>.</li>  
  5.                 <li>*:2*3=<span th:text="2*3">2*3</span>.</li>  
  6.                 <li>/: 9/4=<span th:text="9/4">9/4</span>.</li>  
  7.                 <li>%:9%4=<span th:text="9%4">9%4</span>.</li>  
  8.         </ol>  
  9.     </div>  



4.2布尔运算

e.g.

 

[html]  view plain  copy
 
  1. <div>  
  2.         <ol>  
  3.                 <li th:inline="text">and:<span  th:if="${!#lists.isEmpty(list)} and ${#lists.isEmpty(list)}" th:text="${!#lists.isEmpty(list)} and ${#lists.isEmpty(list)}">and</span>[[${!#lists.isEmpty(list)} and ${#lists.isEmpty(list)}]]</li>  
  4.                 <li>or:<span  th:if="${!#lists.isEmpty(list)} or ${#lists.isEmpty(list)}" th:text="${!#lists.isEmpty(list)} or ${#lists.isEmpty(list)}">or</span></li>  
  5.                 <li>!(not):<span  th:if="${!#lists.isEmpty(list)}" th:text="${!#lists.isEmpty(list)}">not</span></li>  
  6.         </ol>  
  7.     </div>  

 

4.3不等和相等运算符

e.g.

 

[html]  view plain  copy
 
    1. <div>  
    2.         <ol>  
    3.                 <li>比较表达式:  
    4.                     <ol>  
    5.                     <li>>(gt):<span th:text="1+1" th:if="${#lists.size(list)} > 1">大于></span>else</li>  
    6.                     <li>小于lt:<span th:if="${#lists.size(list)} lt 1">小于</span>else</li>  
    7.                     <li>>=(ge):<span  th:if="${#lists.size(list)} >= 1">大于等于>=</span>else</li>  
    8.                     <li>小于等于(le):<span  th:if="${#lists.size(list)} le 1">小于等于</span>else</li>  
    9.                     <li>!(not):<span  th:if="${!#lists.isEmpty(list)}">!(not)</span>else</li>  
    10.                     </ol>  
    11.                 </li>  
    12.                 <li>相等和不等表达式:   
    13.                 <ol>  
    14.                     <li>==(eq):<span th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')">等于==</span></li>  
    15.                     <li>!=(ne/neq):size:<span th:text="${#lists.size(list)}" th:if="${#lists.size(list)} != 1"></span></li>  
    16.                     </ol>  
    17.                 </li>  
    18.         </ol>  
    19.     </div>  

3. 代码

代码详细见Github

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hry2015/article/details/73253080

转载于:https://www.cnblogs.com/pejsidney/p/9140143.html

相关文章:

  • vi/vim基本使用命令
  • 排序算法(三)插入排序
  • 单词篇:(单词识记8~9)
  • LWIP学习笔记之传输控制协议(TCP)(七)
  • hadoop详细配置
  • LeetCode(56):合并区间
  • w10隐藏我的电脑中子文件夹
  • winform的Textbox设置只读之后使用ForeColor更改颜色
  • (十八)三元表达式和列表解析
  • node实现网页内容的爬取
  • ActiveMQ:Exception occurred while processing this request, check the log for more information!
  • Selenium
  • go语言之行--简介与环境搭建
  • hive界面工具SQL Developer的安装;使用sql developer连接hive;使用sql developer连接mysql...
  • linux服务器性能查看
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Angular Elements 及其运作原理
  • JavaScript 基础知识 - 入门篇(一)
  • JS数组方法汇总
  • React-flux杂记
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 闭包,sync使用细节
  • 动态魔术使用DBMS_SQL
  • 前端之Sass/Scss实战笔记
  • 思否第一天
  • 思维导图—你不知道的JavaScript中卷
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 因为阿里,他们成了“杭漂”
  • 怎么把视频里的音乐提取出来
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • # .NET Framework中使用命名管道进行进程间通信
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #预处理和函数的对比以及条件编译
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (175)FPGA门控时钟技术
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (js)循环条件满足时终止循环
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)iOS字体
  • (转)socket Aio demo
  • .CSS-hover 的解释
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET简谈设计模式之(单件模式)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net下简单快捷的数值高低位切换
  • .NET性能优化(文摘)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • :如何用SQL脚本保存存储过程返回的结果集
  • @hook扩展分析
  • [ NOI 2001 ] 食物链
  • [ solr入门 ] - 利用solrJ进行检索