## 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 性能測試對比