## 1.8 屬性
### 1.8.1 引用屬性
屬性引用是模板中的重要一部分,Beetl 支持屬性同 JavaScript 的支持方式一樣,如下
- Beetl支持通過 `.` 號來訪問對象的的屬性,如果 JavaScript 一樣。如果 User 對象有個 getName() 方法,那么在模板中,可以通過 `${xxx.name}` 來訪問
- 如果模板變量是數組或者List類,這可以通過 `[]` 來訪問,如 `${userList[0]}`
- 如果模板變量是Map類,這可以通過 `[]` 來訪問,如 `${map["name"]}` ,如果 key 值是字符串類型,也可以使用 `${map.name}` —— 但不建議這么使用,因為會讓模板閱讀者誤以為是一個 Pojo 對象
- Beetl 也支持Generic Get方式,即如果對象有一個 `public Object get(String key)` 方法,可以通過 `.` 號或者`[]` 來訪問,譬如 `${activityRecord.name}` 或者 `${activityRecord["name"] }` 都將調用 activityRecord 的 `get(String key)` 方法。如果對象既有具體屬性,又有Generic get(這種模型設計方式是不值得鼓勵),則以具體屬性優先級高。
- Beetl也可以通過 `[]` 來引用屬性,如 `${user["name"]}` 相當于 `${user.name}`。這跟 JavaScript 保持一致。但建議不這么做,因為容易讓閱讀模板的人誤認為這是一個Map類型。但好處是可以動態引用屬性,比如;
```java
var attrName="age";
var age=user[attrName]
```
- 需要知道Java集合,數組長度,統一用虛擬屬性`~size`來表示
```java
var list=[1,2,3];
var size = list.~size
```
* 虛擬屬性:Beetl 還可以定義額外的對象屬性,而無需更改java對象,這叫著虛擬屬性,如,對于所有集合,數組,都有共同的虛擬屬性size.虛擬屬性是“.~”+虛擬屬性名
```javascript
template.binding("list",service.getUserList());
template.binding("pageMap",service.getPage());
//在模板里
總共 ${list.~size}
<%
for(user in list){
%>
hello,${user.name};
<% } %>
當前頁${pageMap['page']},總共${pageMap["total"]}
```
### 1.8.2 屬性賦值
Beetl2.7.0 開始支持對象賦值,如:
```javascript
<%
var user = ....
user.name="joelli";
user.friends[0] = getNewUser();
user.map["name"] = "joelli";
%>
```
賦值很少用于模板引擎,在規則引擎,腳本引擎使用場景倒是可以修改對象屬性。Beetl支持語法定制,可以根據使用場景禁止對象賦值。
- 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 性能測試對比