thymeleaf怎么遍历二维数组数组

一.简单的条件:&if&和&unless&
  th:if用法实例:
&th&NAME&/th&
&th&PRICE&/th&
&th&IN STOCK&/th&
&th&COMMENTS&/th&
&tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"&
&td th:text="${prod.name}"&Onions&/td&
&td th:text="${prod.price}"&2.41&/td&
&td th:text="${prod.inStock}? #{true} : #{false}"&yes&/td&
&span th:text="${#lists.ments)}"&2&/span& comment/s
&a href="comments.html"
th:href="@{/product/comments(prodId=${prod.id})}"
th:if="${not #lists.ments)}"&view&/a&
如果值不是空:   
  1.如果一个布尔值,是true。  
  2.如果值是一个数字,非零&non-zero 
  3.如果是一个字符,非零值 non-zero 
  4.如果值是一个字符串,而不是&false&,&off& or &no&  
  5.如果值不是布尔,一个数字,一个字符或字符串。  
  (如果值是null,th:if将评估为false)。
th:unless用法:
&a href="comments.html"
th:href="@{/comments(prodId=${prod.id})}"
th:unless="${#lists.ments)}"&view&/a&
二.switch用法:(th:switch&/&th:case)
&div th:switch="${user.role}"&
&p th:case="'admin'"&User is an administrator&/p&
&p th:case="#{roles.manager}"&User is a manager&/p&
被指定为默认选项用th:case="*";相当于default,例如:
&div th:switch="${user.role}"&
&p th:case="'admin'"&User is an administrator&/p&
&p th:case="#{roles.manager}"&User is a manager&/p&
&p th:case="*"&User is some other thing&/p&
阅读(...) 评论()Thymeleaf中each标签遍历list如何获取index - CSDN博客
Thymeleaf中each标签遍历list如何获取index
&tr th:each=&user,userStat:${users}&&
userStat是状态变量,有 index,count,size,current,even,odd,first,last等属性,如果没有显示设置状态变量,thymeleaf会默
认给个“变量名+Stat&的状态变量。
本文已收录于以下专栏:
相关文章推荐
th:each属性用于迭代循环,语法:th:each=&obj:${objLis}&
controller
@RequestMapping(&/hello&)
public String hello(Model map){
Map user= new HashMap();
使用模板的要点:
    页面主体结构固定,具体参数可变,尽可能让参数动态化,才能提高模板的复用性
=================================================...
转载请注明出处:http://blog.csdn.net/iwanghang/
觉得博文有用,请点赞,请评论,请关注,谢谢!~
数组的遍历方法有很多,在其他语言里,下标连续的数组...
php数组的遍历讲解
本文主要讲解for,foreach,list,each,key,指针操作相关函数,array_flip ,array_reverse,array_walks等函数的对数组的...
php数组的遍历讲解
本文主要讲解for,foreach,list,each,key,指针操作相关函数,array_flip ,array_reverse,array_walks等函数的对数组的遍历...
PHP 使用list函数each函数遍历数组(实现foreach)解析
直接进入主题吧。
先看看list函数:
list() 函数用于在一次操作中给一组变量赋值,并且无限参数(参数超过索引数组里元...
今天碰到一个很有意思的问题,就是需要用Struts 2的iterator标签来遍历一个含有双层List的嵌套。
首先我们从最基础的说起,用iterator标签遍历一个List。
如果Action中...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)本篇文章是对上篇文章中Thymeleaf标签的补充。
1.th:each:循环,&tr th:each="user,userStat:${users}"&,userStat是状态变量,有 index,count,size,current,even,odd,first,last等属性,如果没有显示设置状态变量.thymeleaf会默认给个“变量名+Stat"的状态变量。
下面大家看下例子:
&form id="login-form" th:action="@{/addStudent}" th:object="${stuReqBean}" method="POST"&
  &div class="student" th:each="stuIter,rowStat:${stuReqBean.students}"&
    &input type="text" class="firstName" value="" th:field="*{students[__${rowStat.index}__].firstName}"&&/input&
    &input type="text" class="school" value="" th:field="*{students[__${rowStat.index}__].school}"&&/input&
  &/div&
上面的例子中通过选择表达式*{}既能将表单绑定到后台的StudentRequestBean中的集合属性students,也能将Servlet上下文中的StudentRequestBean中的List类型的students变量回显,回显时通过th:each进行遍历。
注意1:绑定集合属性元素下标的用法*{students[__${rowStat.index}__].firstName}
注意2:如果List&Student&&students为null,页面将无法显示表单,后台必须给students初始化一个值,即:
List&Student & stus = new ArrayList&Student &();
stus .add(new Student ());
StudentRequestBean.setStudents(stus );
注意3:stuIter代表students的迭代器。
还记得我们之前用过的这个例子吗?
&th&食物名称&/th&
&th&食物价格&/th&
&th&可现做&/th&
&th&食客评价&/th&
&tr th:each="prod:${prods}"&
&td th:text="${prod.name}"&醋溜土豆丝&/td&
&td th:text="${#numbers.formatDecimal(prod.price,0,2)}"&2.41&/td&
&td th:text="${prod.isReady}?#{true}:#{false}"&yes&/td&
&span th:text=${#lists.ments)}&2&/span&个评价
&a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}"
th:if="${not #lists.ments)}"&查看&/a&
**prod:\({prods}**属性值的意思是,迭代\){prods}的每个元素并重复这个模板的这个片段。然后解释一下这两部分分别的意思:
${prods}被称为迭代表达式或迭代变量
prod被称为重复变量或迭代值
注意:迭代值只可以用在tr节点上面(包括迭代里边包含的td标签)。
保持迭代状态:当使用th:each的时候,Thymeleaf会提供一个跟着迭代状态的机制:状态变量。状态定义被封装在th:each的属性中。并包含以下数据:
获取当前迭代的从0开始的下标,使用index属性
获取当前迭代的从1开始的下标,使用count属性
获取当前迭代元素的总量,使用size属性
获取迭代变量中的迭代值,使用current属性
当前迭代值是奇数还是偶数,使用even/odd的布尔值属性
当前的迭代值是不是第一个元素,使用first布尔值属性
当前迭代值是不是最后一个元素,使用last布尔值属性。
现在将上面的例子稍作修改:
&h1&产品列表&/h1&
&th&产品名称&/th&
&th&产品价格&/th&
&th&有现货&/th&
&tr th:each="prod,iterStat:${prods}" th:class="${iterStat.odd}?'odd'"&
&td th:text="${prod.name}"&土豆&/td&
&td th:text="${prod.price}"&2.41&/td&
&td th:text="${prod.inStock}?#{true}:#{false}"&yes&/td&
&a href="../home.html" th:href="@{/}"&返回首页&/a&
可以看到,状态变量(即iterStat)的定义:将这个变量的名字作为属性写在迭代值之后,用逗号于迭代值隔开。产生了迭代值之后,他的状态值就可以也仅仅可以在th:each包含的代码段中使用。我们再来看一个例子:
&li&List循环:
&table border="1"&
&th&用户名&/th&
&th&邮箱&/th&
&th&管理员&/th&
&th&状态变量:index&/th&
&th&状态变量:count&/th&
&th&状态变量:size&/th&
&th&状态变量:current.userName&/th&
&th&状态变量:even&/th&
&th&状态变量:odd&/th&
&th&状态变量:first&/th&
&th&状态变量:last&/th&
th:each="user,userStat : ${list}"&
&td th:text="${user.userName}"&Onions&/td&
&td th:text="${user.email}"&.cn&/td&
&td th:text="${user.isAdmin}"&yes&/td&
&th th:text="${userStat.index}"&状态变量:index&/th&
&th th:text="${userStat.count}"&状态变量:count&/th&
&th th:text="${userStat.size}"&状态变量:size&/th&
&th th:text="${userStat.current.userName}"&状态变量:current&/th&
&th th:text="${userStat.even}"&状态变量:even****&/th&
&th th:text="${userStat.odd}"&状态变量:odd&/th&
&th th:text="${userStat.first}"&状态变量:first&/th&
&th th:text="${userStat.last}"&状态变量:last&/th&
&li&Map循环:
&div th:each="mapS:${map}"&
&div th:text="${mapS}"&&/div&
&li&数组循环:
&div th:each="arrayS:${arrays}"&
&div th:text="${arrayS}"&&/div&
现在对each有理解了吗?如果还没有的话,这里还有一个例子:
&div class="item active"
th:if="${iterStat.index==0}" th:each="img,iterStat:${pics}"&
  &img th:src="${img.path}" style="width: 303height: 171"/&
/*对arrayList对象pics遍历,使用img作为接受参数接收,使用iterStat作为pics下标值,通过iterStat.index得到当前所处下标值;通过th:src="${img.path}"得到对象中图片路径设置图片显示图*/
&tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'"&
&td th:text="${prod.name}"&Onions&/td&
&td th:text="${prod.price}"&2.41&/td&
&td th:text="${prod.inStock}? #{true} : #{false}"&yes&/td&
/*判断下标是否为奇数,设置tr样式*/
2.th:fragment:我们经常会想让我们的模板包含一些其他模板,比较常见的用途如页眉,页脚,菜单等。为了做到这一点,Thymeleaf需要我们定义一些可用片段,我们能通过th:fragment属性来实现这一点。
声明模板片段
&div th: fragment=" copy" &
(C) 2011 The Good Thymes Virtual Grocery
引入模板片段:
&div th: include=" /templates/footer : : copy" &&/div&
&div th: replace=" /templates/footer : : copy" &&/div&
现在是不是对include replace有有疑问了呢?先看下 th:insert和th:replace的不同点(以及th:include)
th:insert是将th:fragment标签的内容纳入宿主标签
th:replace是使用th:fragment标签替换宿主标签
th:include与th:insert类似,但是他插入的是片段的内容,而不是片段。
还是举个例子吧:
&div th:fragment="copy"&
& 网络商店
导入到两个div标签中:
&div th:insert="footer :: copy"&&/div&
&div th:replace="footer :: copy"&&/div&
&div th:include="footer :: copy"&&/div&
执行结果:
& 网络商店
& 网络商店
& 网络商店
3.th:attr:设置标签属性,多个属性可以用逗号分隔,比如th:attr="src=@{/image/aa.jpg},title=#{logo}"& (很多大博客上都说这个标签不够优雅,很难看,所以,不常用。)
&form action="subscribe.html" th:attr="action=@{/subscribe}"&
&fieldset&
&input type="text" name="email" /&
&input type="submit" value="订阅!" th:attr="value=#{subscribe.submit}"/&
&/fieldset&
用法很简单:th:attr将是一个值对应一个属性的表达式,在转换处理后,将会返回如下结果:
&form action="/gtvg/subscribe"&
&fieldset&
&input type="text" name="email" /&
&input type="submit" value="subscribe me!"/&
&/fieldset&
除了更新了属性值,还可以看到,应用的已经自动将url更新为context前缀的url.如果,我们想在同时更新多个属性呢?xml的规则不允许在一个标签内设置两个同名的属性,所以,可以用逗号来分割th:attr的值,比如:
&img src="../../images/gtvglogo.png"
th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" /&
将转换为:
&img src="/gtgv/images/gtvglogo.png" title="这里是logo" alt="这里是logo" /&
下一章节讲介绍一些安装以及真正在工作当中的使用方法。
阅读(...) 评论()posts - 77,&
comments - 51,&
trackbacks - 0
thymeleaf,我个人认为是个比较好的模板,性能也比一般的,比如freemaker的要高,而且把将美工和程序员能够结合起来,美工能够在浏览器中查看静态效果,程序员可以在应用服务器查看带数据的效果。thymeleaf是一个支持html原型的自然引擎,它在html标签增加额外的属性来达到模板+数据的展示方式,由于浏览器解释html时,忽略未定义的标签属性,因此thymeleaf的模板可以静态运行。由于thymeleaf在内存缓存解析后的模板,解析后的模板是基于tree的dom节点树,因此thymeleaf适用于一般的web页面,不适合基于数据的xml。thymeleaf的context,即提供数据的地方,基于web的context,即WebContext相对context增加param,session,application变量,并且自动将request atttributes添加到context variable map,可以在模板直接访问。在模板处理前,thymeleaf还会增加一个变量execInfo,比如${execInfo.templateName},${execInfo.now}等。数据访问模式:${...},变量引用模式,比如${myBean.property},如果用springDialect,则使用的是spring EL,如果不用spring,则用的ognl。*{...},选择表达式,一般是th:object之后,直接取object中的属性。当没有选取对象时,其功能等同${...},*{firstName}也等同于${#object.firstName},#object代表当前选择的对象。@{...}链接url的表达式。th:href="@{/xxx/aa.do(id=${o.id})",会自动进行url-encoding的处理。@{...}内部可以是需要计算的表达式,比如:th:href=”@{'/details/'+${user.login}(orderId=${o.id})}"#{...},i18n,国际化。需要注意的:#{${welcomeMsgKey}(${session.user.name})}:i18n message支持占位。各个表达式支持嵌套。表达式基本对象:#ctx:context object#root或者#vars#locale#httpServletRequest#httpSession表达式功能对象:#dates:java.util.Date的功能方法类。#calendars:类似#dates,面向java.util.Calendar#numbers:格式化数字的功能方法类。#strings:字符串对象的功能类,contains,startWiths,prepending/appending等等。#objects:对objects的功能类操作。#bools:对布尔值求值的功能方法。#arrays:对数组的功能类方法。#lists:对lists功能类方法#sets#maps#aggregates:对数组或者集合创建聚合的功能方法,th:text="${#aggregates.sum(o.orderLines.{purchasePrice * amount})}"#messages:在变量表达式中获取外部信息的功能类方法。#ids:处理可能重复的id属性的功能类方法。条件操作:(if)?(then):满足条件,执行then。(if)?(then):(else)(value)?:(defalutValue)一些标签:th:text="${data}",将data的值替换该属性所在标签的body。字符常量要用引号,比如th:text="'hello world'",th:text="2011+3",th:text="'my name is '+${user.name}"th:utext,和th:text的区别是"unescaped text"。th:with,定义变量,th:with="isEven=${prodStat.count}%2==0",定义多个变量可以用逗号分隔。th:attr,设置标签属性,多个属性可以用逗号分隔,比如th:attr="src=@{/image/aa.jpg},title=#{logo}",此标签不太优雅,一般用的比较少。th:[tagAttr],设置标签的各个属性,比如th:value,th:action等。可以一次设置两个属性,比如:th:alt-title="#{logo}"对属性增加前缀和后缀,用th:attrappend,th:attrprepend,比如:th:attrappend="class=${' '+cssStyle}"对于属性是有些特定值的,比如checked属性,thymeleaf都采用bool值,比如th:checked=${user.isActive}th:each,循环,&tr th:each="user,userStat:${users}"&,userStat是状态变量,有index,count,size,current,even,odd,first,last等属性,如果没有显示设置状态变量,thymeleaf会默认给个“变量名+Stat"的状态变量。th:if or th:unless,条件判断,支持布尔值,数字(非零为true),字符,字符串等。th:switch,th:case,选择语句。 th:case="*"表示default case。th:fragment,th:include,th:substituteby:fragment为片段标记,指定一个模板内一部分代码为一个片段,然后在其它的页面中用th:include或th:substituteby进行包含。包含的格式为,格式内可以为表达式,比如th:include="footer::$(user.logined)?'logined':'notLogin'":"templatename::fragname",指定模板内的指定片段。"templateName::[domselector]",指定模板的dom selector,被包含的模板内不需要th:fragment.”templatename",包含整个模板。th:include和th:substituteby的区别在于前者包含片段的内容到当前标签内,后者是用整个片段(内容和上一层)替换当前标签(不仅仅是标签内容)。th:remove="all|body|tag|all-but-first",一般用于将mock数据在真实环境中移除,all表示移除标签以及标签内容,body只移除内容,tag只移除所属标签,不移除内容,all-but-first,除第一条外其它不移除。由于一个标签内可以包含多个th:x属性,其先后顺序为:include,each,if/unless/switch/case,with,attr/attrprepend/attrappend,value/href,src ,etc,text/utext,fragment,remove。内联文本:[[...]]内联文本的表示方式,使用时,必须先用th:inline="text/javascript/none"激活,th:inline可以在父级标签内使用,甚至作为body的标签。内联文本尽管比th:text的代码少,但是不利于原型显示。内联js:&scriptth:inline="javascript"&/*&![CDATA[*/...var username = /*[[${sesion.user.name}]]*/ 'Sebastian';.../*]]&*/&/script&js附加代码:/*[+var msg = 'This is a working application';+]*/js移除代码:/*[- */var msg = 'This is a non-working template';/* -]*/模板缓存:1、指定特定的缓存:templateResolver.setCacheable(false);templateResolver.getCacheablePatternSpec().addPattern("/users/*");2、清除缓存:templateEngine.clearTemplateCache();templateEngine.clearTemplateCacheFor("/users/userList");补充点url知识:1、绝对路径:.cn2、相对路径:&&& 2.1:页面相对路径,一般指相对当前请求的url,比如 aa.do&&& 2.2:上下文相对,比如/xxx/aa.do&&& 2.3:服务器相对路径,比如~/other/xxx/aa.do,允许切换到相同服务器不同上下文的路径。
阅读(6960)
2017年11月
293031123456789101112131415161718192021222324252627282930123456789
随笔分类(31)
随笔档案(75)
文章分类(1)
文章档案(3)
阅读排行榜
评论排行榜using thymeleaf 之 th:each迭代循环 - CSDN博客
using thymeleaf 之 th:each迭代循环
th:each属性用于迭代循环,语法:th:each=&obj,iterStat:${objList}&
迭代对象可以是java.util.List,java.util.Map,数组等;
iterStat称作状态变量,属性有:
&&& index:当前迭代对象的index(从0开始计算)
&&& count: 当前迭代对象的index(从1开始计算)
&&& size:被迭代对象的大小
&&& current:当前迭代变量
&&& even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
&&& first:布尔值,当前循环是否是第一个
&&& last:布尔值,当前循环是否是最后一个
&li&List循环:
&table border=&1&&
&th&用户名&/th&
&th&邮箱&/th&
&th&管理员&/th&
&th&状态变量:index&/th&
&th&状态变量:count&/th&
&th&状态变量:size&/th&
&th&状态变量:current.userName&/th&
&th&状态变量:even&/th&
&th&状态变量:odd&/th&
&th&状态变量:first&/th&
&th&状态变量:last&/th&
th:each=&user,userStat : ${list}&&
&td th:text=&${user.userName}&&Onions&/td&
&td th:text=&${user.email}&&.cn&/td&
&td th:text=&${user.isAdmin}&&yes&/td&
&th th:text=&${userStat.index}&&状态变量:index&/th&
&th th:text=&${userStat.count}&&状态变量:count&/th&
&th th:text=&${userStat.size}&&状态变量:size&/th&
&th th:text=&${userStat.current.userName}&&状态变量:current&/th&
&th th:text=&${userStat.even}&&状态变量:even****&/th&
&th th:text=&${userStat.odd}&&状态变量:odd&/th&
&th th:text=&${userStat.first}&&状态变量:first&/th&
&th th:text=&${userStat.last}&&状态变量:last&/th&
&li&Map循环:
&div th:each=&mapS:${map}&&
&div th:text=&${mapS}&&&/div&
&li&数组循环:
&div th:each=&arrayS:${arrays}&&
&div th:text=&${arrayS}&&&/div&
本文已收录于以下专栏:
相关文章推荐
前言项目中前端要实现滚屏展示,即一屏展示七个,从六屏。刚开始直接外层一个sequence进行六屏循环,内层直接拿数据对象each,发现不行,只能取7个,很是惆怅。后来google了半天,结合自己的一些...
第7章 Spring Boot的Web开发7.1 Spring Boot的Web开发支持
Spring Boot提供了spring-boot-starter-web为Web开发予以支持,spring...
一.th:eath迭代集合用法:
table&thead&tr&th&序号th&th&用户名th&th&密码th&th&用户昵称th&tr&tr th:each=&user:${userlist}...
Spring Boot学习记录(二)–thymeleaf模板标签(空格分隔): spring-boot自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thyme...
userStat是状态变量,有 index,count,size,current,even,odd,first,last等属性,如果没有显示设置状态变量,thymeleaf会默
认给个“变量名+S...
thymeleaf模板语法,都以th属性开头,如:
span th:text=&...&&
一,thymeleaf-简单表达式
1.变量表达式
2.选择或星号表达式
3.文字国际化表达式...
如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析、日期格式化、数字格式化等)、定义变量、获取URL的参数和在页面标签中自定义属性的应用。
如果对Thymeleaf的基本使用、...
th:each属性用于迭代循环,语法:th:each=&obj,iterStat:${objList}&
迭代对象可以是Java.util.List,java.util.Map,数组等;
在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4....
controller
@RequestMapping(&/hello&)
public String hello(Model map){
Map user= new HashMap();
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 怎么遍历二维数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信