## 1.10 循环语句
Beetl支持丰富的循环方式,如 `for-in`,`for(exp;exp;exp)`,`while`,以及循环控制语句`break;`,`continue;` 另外,如果**没有进入for循环体**,还可以执行 `elsefor` 指定的语句。
[TOC]
### 1.10.1 for-in
for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子
```javascript
<%
for(user in userList){
print(userLP.index);
print(user.name);
}
%>
```
第三行代码userLP是Beetl隐含定义的变量,是一个ILoopStatus实例,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息,如
- **userLP.index **当前的索引,从1开始
- userLP.dataIndex 索引,从0开始
- **userLP.size **集合的长度
- **userLP.first** 是否是第一个
- **userLP.last** 是否是最后一个
- **userLP.even** 索引是否是偶数
- **userLP.odd** 索引是否是奇数
> 如何记住后缀是LP,有俩个诀窍,英语棒的是Loop的缩写,拼音好的是老婆的拼音缩写,这可以让程序员每次写到这的时候都会想想老婆(不管有没有,哈哈)
如下是Map使用例子
```javascript
<%
for(entry in map){
var key = entry.key;
var value = entry.value;
print(value.name);
}
%>
```
### 1.10.2 for(exp;exp;exp)
对于渲染逻辑更为常见的是经典的for循环语句,如下例子
```javascript
<%
var a = [1,2,3];
for(var i=0;i<a.~size;i++){
print(a[i]);
}
%>
```
### 1.10.3 while
对于渲染逻辑同样常见的有的while循环语句,如下例子
```javascript
<%
var i = 0;
while(i<5){
print(i);
i++;
}
%>
```
### 1.10.4 elsefor
不同于通常程序语言,如果没有进入循环体,则不需额外的处理,模板渲染逻辑更常见情况是如果没有进入循环体,还需要做点什么,因此,对于for循环来说,还有elsefor 用来表达如果循环体没有进入,则执行elsefor 后的语句
```javascript
<%
var list = [];
for(item in list){
}elsefor{
print("未有记录");
}
%>
```
- Beetl 3 中文文档
- 第一部分 基础用法
- 1.1 安装
- 1.2 快速开始
- 1.3 模板基础配置
- 1.4 模板加载器
- 1.5 定界符与占位符
- 1.6 注释
- 1.7 变量定义
- 1.8 属性
- 1.9 数学表达式
- 1.10 循环语句
- 1.11 条件语句
- 1.12 异常捕获
- 1.13 虚拟属性
- 1.14 函数调用
- 1.15 安全输出(重要)
- 1.16 输出格式化
- 1.17 标签
- 1.18 调用Java方法与属性
- 1.19 严格MVC控制
- 1.20 指令
- 1.21 错误处理
- 1.22 Beetl小工具
- 1.23 Escape
- 第二部分 高级用法
- 2.1 配置GroupTemplate
- 2.2 自定义方法
- 2.3 自定义格式化函数
- 2.4 自定义标签
- 2.5 自定义虚拟属性
- 2.6 使用额外的资源加载器
- 2.7 自定义资源加载器
- 2.8 使用CompositeResourceLoader
- 2.9 自定义错误处理器
- 2.10 自定义安全管理器
- 2.11 注册全局共享变量
- 2.12 自定义布局
- 2.13 性能优化
- 2.14 定制输出
- 2.15 定制模板引擎
- 2.16 直接运行Beetl脚本
- 2.17 模板校验
- 第三部分 Web 集成
- 3.1 Web提供的全局变量
- 3.2 集成技术开发指南
- 3.3 Servlet集成
- 3.4 SpringMVC集成
- 3.5 Spring Boot集成
- 3.6 Jodd集成
- 3.7 JFinal4 集成方案
- 3.8 Nutz集成
- 3.9 Struts2集成
- 3.10 整合ajax的局部渲染技术
- 3.11 在页面输出错误提示信息
- 附录
- 4.1 内置方法
- 4.2 Spring相关函数
- 4.3 Spring security
- 4.4 shiro
- 4.5 内置格式化方法
- 4.6 内置标签函数
- 4.7 内置html标签
- 4.8 性能优化
- 4.9 Eclipse 插件
- 4.10 性能测试对比