1. 循环变量内建函数counter、has_next、index、is_even_item、is_first、is_last、is_odd_item、item_cycle、item_parity和item_parity_cap只能用于list和items指令的循环变量。

2. index

2.1. 返回当前迭代(由循环变量名称识别)从0开始的索引。

<#list ['a', 'b', 'c', 'd'] as word>${word?index}: ${word}<br />
</#list>

3. counter

3.1. 返回当前迭代(由循环变量名称识别)从1开始的索引。

3.2. 当list指令不指定循环变量时, 这些内建函数就作用于items指令的循环变量。

<#list ['a', 'b', 'c', 'd']><#items as word>${word?counter}: ${word}<br /></#items>
</#list>

4. has_next

4.1. 辨别循环项是否是当前迭代(由循环变量名称识别)的最后一项。

5. is_even_item

5.1. 辨别循环项是否是当前迭代(由循环变量名称识别)间隔1的奇数项。

6. is_first

6.1. 辨别循环项是否是当前迭代(由循环变量名称识别)的第一项。

7. is_last

7.1. 辨别循环项是否是当前迭代(由循环变量名称识别)的最后一项。

8. is_odd_item

8.1. 辨别循环项是否是当前迭代(由循环变量名称识别)间隔1的偶数项。

9. item_parity

9.1. 基于当前迭代(由循环变量名称识别)间隔为1的索引的奇偶性, 返回字符串值"odd"或"even"。这通常用于表格中行间的颜色变换。

10. item_parity_cap

10.1. 基于当前迭代(由循环变量名称识别)间隔为1的索引的奇偶性, 返回字符串值"Odd"或"Even"(请注意大写)。

11. item_cycle

11.1. 这是item_parity内建函数更为通用的版本, 这里可以指定何值来代替"odd"和"even"。它也允许多余两个值来循环。

12. switch独立类型内建函数

12.1. 它的通用版本就像matchedValue?switch(case1, result1, case2, result2, ... caseN, resultN, defaultResult), 这里的defaultResult可以被忽略。

12.2. switch会找到第一个case和参数(从左到右)值matchedValue相等, 之后返回直接在case参数后的result参数的值, 如果它没有找到一个相等的case, 那么就返回defaultResult的值, 如果没有defaultResult参数(换言之, 参数的个数是基数), 那么就发生错误中止模板处理。

12.3. matchedValue和case参数值的比较, 就像==操作符。那就只比较标量并且是相同类型的值。

12.4. 对case参数值的类型没有任何限制, 它们可以是字符串, 或数字, 布尔, 或日期等。但因为==操作符的特性, 那么在相同的switch中使用不同类型的case参数是没有意义的。

12.5. case参数表达式不需要是常量值, 它们可以是任意复杂的表达式。当然result, defaultResult和matchedValue也是相同的。

12.6. 不像普通的方法调用, switch(...)的那些参数被评估为确实需要的。比如: 在two()?switch(c1(), r1(), c2(), r2(), c3(), r3())中, 如果two()返回2, c1()返回1, 且c2()返回2, 那么只有下面的函数会被调用, 而且顺序是这样c1(), c2(), r2()。它保证了case参数表达式被从左到右进行评估, 直到第一个匹配项被找到。它也保证了只有属于第一个匹配case的result表达式会被评估。它还保证了如果没有匹配的case参数, 那么defaultResult表达式会被评估。

13. 例子

13.1. 新建一个名为FMBuiltInsForLoop的动态Web工程, 同时添加相关jar包。

13.2. 编写FMFactory.java

package com.fm.util;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import freemarker.template.Configuration;
import freemarker.template.TemplateExceptionHandler;public class FMFactory {private final static FMFactory instance = new FMFactory();private FMFactory() {}public static FMFactory getInstance() {return instance;}private Map<String, Configuration> map = new ConcurrentHashMap<String, Configuration>();// 创建单个Configuration实例public synchronized Configuration getCfg(Object servletContext, String path) {if(null != map.get(path)) {return map.get(path);}Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);cfg.setServletContextForTemplateLoading(servletContext, path);cfg.setDefaultEncoding("utf-8");cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);map.put(path, cfg);return cfg;}}

13.3. 编写BuiltInsForLoop.java

package com.fm.action;import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fm.util.FMFactory;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class BuiltInsForLoop extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Configuration cfg = FMFactory.getInstance().getCfg(req.getServletContext(), "/WEB-INF/templates");Template template = cfg.getTemplate("builtinsforloop.html");Map<String, Object> root = new HashMap<String, Object>();Writer out = new OutputStreamWriter(resp.getOutputStream());try {template.process(root, out);} catch (TemplateException e) {e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

13.4. 修改web.xml

13.5. 在/WEB-INF/templates下编写builtinsforloop.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>循环变量内建函数</title><style type="text/css">b {font-size: 32px;}.odd {color: #009688;}.even {color: #FFB800;}.Odd {color: #5FB878;}.Even {color: #FF5722;}.first {color: #393D49;}.second {color: #01AAED;}.third {color: #FFB800;}.fourth {color: #FF5722;}</style></head><body><h2>index</h2><#list ['a', 'b', 'c', 'd'] as word>${word?index}: ${word}<br /></#list><h2>counter</h2><#list ['a', 'b', 'c', 'd']><#items as word>${word?counter}: ${word}<br /></#items></#list><h2>has_next</h2><#list ['a', 'b', 'c', 'd'] as word>${word}<#if word?has_next>,<#else>.</#if></#list><h2>is_even_item</h2><#list ['a', 'b', 'c', 'd'] as word><#if word?is_even_item>${word?index}: ${word}<br /></#if></#list><h2>is_first</h2><#list ['a', 'b', 'c', 'd'] as word><#if word?is_first>${word}</#if></#list><h2>is_last</h2><#list ['a', 'b', 'c', 'd'] as word><#if word?is_last>${word}</#if></#list><h2>is_odd_item</h2><#list ['a', 'b', 'c', 'd'] as word><#if word?is_odd_item>${word?index}: ${word}<br /></#if></#list><h2>item_parity</h2><#list ['a', 'b', 'c', 'd'] as word><b class="${word?item_parity}">${word}</b></#list><h2>item_parity_cap</h2><#list ['a', 'b', 'c', 'd'] as word><b class="${word?item_parity_cap}">${word}</b></#list><h2>item_cycle</h2><#list ['a', 'b', 'c', 'd'] as word><b class="${word?item_cycle('first', 'second', 'third', 'fourth')}">${word}</b></#list><h2>switch</h2><#list ['r', 'w', 'x', 's'] as flag>${flag?switch('r', 'readable', 'w' 'writable', 'x', 'executable', 'unknown flag: ' + flag)}<br /></#list></body>
</html>

13.6. 运行项目

016_循环变量内建函数相关推荐

  1. linux shell for 循环变量,shell for循环总结

    1 shell for循环语法 for 变量 in 列表 do command1 command2 ... commandN done 1.1 读取列表中的值 #!/bin/bash for test ...

  2. Matlab中for循环中的循环变量在循环体中不能改变

    如下代码: for i = 1:10if i==3i=i+5;end end 其中的 i=i+5 这一行不会改变for循环中i的值,for循环变量i会取哪些值,是第一次进入循环时就决定了的.无论在循环 ...

  3. php for循环执行函数,自执行函数用for结束后面不能访问循环变量

    摘要:<?php $arr=[8,15,59,60,75,88];$r=0;foreach ($arr as $k=>$v) {$x = $v;$r += $x;echo $v.'_'.$ ...

  4. 返回函数之循环变量问题

    返回函数之循环变量问题 一.学习要点: 1.返回函数创建的时候不被执行,调用的时候才被执行: 2.返回函数不要应用任何循环变量或者后续会发生变化的变量: 3.如果一定要引用循环变量,方法是在创建一个函 ...

  5. python的for语句中i未被定义_python – PyLint:使用可能未定义的循环变量警告

    阅读this question后,我可以理解为什么可能输出这个警告,但是当循环变量不能被定义时我有一个特定的情况-- for i in range(0, 2): print i print i PyL ...

  6. html模板 循环里if,django模板里循环变量table里想要两个一行如何控制

    2016-8-3 周三 做项目时遇到的问题: 每个div由循环变量输出: {% for key,value in formextenddetail %} {{ key }} {{ value }} { ...

  7. Javascript中的循环变量声明,到底应该放在哪儿?

    不放走任何一个细节.相信很多Javascript开发者都在声明循环变量时犹 豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪 ...

  8. java中可以用浮点作为循环变量吗_Java千问:Java循环语句的几个冷门知识点你都知道吗?...

    我们在进行Java开发的时候,经常会用到循环结构,但是有几个关于循环的"冷门"知识点,不知道你是不是都已经掌握了呢?我们一起来看看 一.大括号可以不写吗? 我们都知道,如果每次循环 ...

  9. linux shell for 循环变量,shell for循环、循环变量值付给其他shell脚本的方法

    本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数. shell for 循环: #!第一种写法 类似c.java for ((i=1; i<=100; i + ...

最新文章

  1. 令人苦恼的调试缓慢问题
  2. nginx学习九 upstream 负载均衡
  3. 交叉编译器arm-linux-gcc
  4. 联想340c笔记本cpu能升级吗_联想扬天威6 2021款酷睿版怎么样?评测值得买吗?从价格和配置看就知道了...
  5. 不同类型的变量与零值比较的方法
  6. HDU 1542:Atlantis(扫描线+线段树 矩形面积并)***
  7. BIM工程信息管理系统-详细设计
  8. 语音处理的分帧,帧移,加窗,滤波,降噪,合成
  9. C# 解析User-Agent工具
  10. java 设置启动参数设置_1.java程序启动参数配置
  11. onlyoffice 自动保存_onlyoffice在线编辑
  12. Java基本数据类型及对应包装类
  13. k近邻(kNN)算法的Python实现(基于欧氏距离)
  14. eve为什么服务器还在维护,EVE无法进入
  15. laravel教程入门笔记
  16. 使用python计算水仙花数
  17. canvas清除画布
  18. android 图形平移 镜子效果 倒影效果
  19. 用HTML+CSS做成的一个简单网页(小兔鲜儿)
  20. 东南蒙纳士计算机复试,2016年东南大学——蒙纳士大学双硕士学位研究生复试通知...

热门文章

  1. NumPy 数组对象
  2. nginx安装并支持upstream和tcp代理模块
  3. Android监视返回键
  4. mysql 输出当前月所有日期与对应的星期
  5. 升级Firefox8后watir-webdriver出现错误“unable to obtain stable firefox connection in 60 seconds”...
  6. swoole 定时器
  7. 如何实时查看linux下的日志
  8. Vue之通过连接数据库的接口获取列表实现添加删除功能
  9. docker 部署mysql服务之后,执行sql脚本
  10. PHP函数整理(一)