## 4.2 Spring 相關函數
Spring函數并沒有內置,需要注冊,如下
```xml
<bean name="beetlGroupUtilConfiguration" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
<property name="functions">
<map>
<!-- 定義SpEL方法 -->
<entry key="spel">
<bean class="org.beetl.ext.spring.SpELFunction"/>
</entry>
</map>
</property>
<property name="functionPackages">
<map>
<entry key="sputil">
<bean class="org.beetl.ext.spring.UtilsFunctionPackage"/>
</entry>
</map>
</property>
</bean>
```
spel(spelString, rootObject) SpEL方法傳入一個Spring SpEL表達式以獲取表達式結果,方法建議以函數的方式定義在BeetlGroupUtilConfiguration的functions中
spelString: SpEL表達式字符串,必傳(否則返回null) rootObject: 作為spel的根對象(對應#root),可以是一個Map或Bean對象,默認取空Map。由于Beetl運行上下文無法直接獲取模版局部變量的變量名,建議局部變量采用自定義Map的方式傳入
- 列表篩選(以自定義Map為根對象傳入局部變量)
```javascript
<% var intArray = [12, 1, 2, 3]; %>
${spel('#root.intArray.?[#this>10]', {intArray: intArray})}
```
- 以Bean對象為根對象
```javascript
<% var now = date(); %>
${spel('#root.year + 1900', now)}
```
- 直接new對象
```javascript
${spel('(new java.util.Date()).year + 1900')}
```
- 直接引用Spring Bean
```javascript
${spel('@testBean')}
```
- 默認變量
- \#root 表示SpEL的根對象, 由spel函數第二參數傳入,默認是一個空map
- \#context 表示Beetl執行上下文
- \#global 表示Beetl的共享變量Map,由于Beetl上下文無法獲取臨時變量名,臨時變量建議使用根對象的方式傳入
- \#ctxPath 表示Servlet Context Path(由Beetl WebRender提供)
- \#servlet 可以從中獲取到Servlet request,response,session原生實例(由Beetl WebRender提供)
- \#parameter 表示請求參數Map(由Beetl WebRender提供)
- \#request 表示請求對象(由Beetl WebRender提供)
- \#session 表示會話域屬性Map(由Beetl WebRender提供)
sputil 提供了spring內置的一些功能,如
```java
// 測試source中是否包含了candidates的某個成員(相當于交集非空)
sputil.containsAny(Collection<?> source, Collection<?> candidates)
// 返回在source集合總第一個也屬于candidates集的元素
sputil.findFirstMatch(Collection<?> source, Collection<?> candidates)
// 測試指定文本是否匹配指定的Ant表達式(\*表達式), 多個表達式只要一個匹配即可
sputil.antMatch(String input, String... patterns)
// 返回指定路徑表示的文件的擴展名(不帶點.)
sputil.fileExtension(String path)
// 忽略大小寫的endsWith
sputil.endsWithIgnoreCase(String input, String suffix)
// 忽略大小寫的startsWith
sputil.startsWithIgnoreCase(String input, String prefix)
// 測試輸入值是否為空白, null視為空白, 無視字符串中的空白字符
sputil.isBlank(String input)
// 首字母大寫轉換
sputil.capitalize(String input)
// 首字母小寫轉換
sputil.uncapitalize(String input)
// 在集合或數組元素之間拼接指定分隔符返回字符串
// null表示空集, 其他類型表示單元素集合
sputil.join(Object collection, String delim)
// 同上, 只是會在最后結果前后加上前綴和后綴
// 注意這個函數名叫做joinEx
sputil.joinEx(Object collection, String delim, String prefix, String suffix)
// 對文本進行html轉義
sputil.html(String input)
// 對文本進行javascript轉義
sputil.javaScript(String input)
```
- 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 性能測試對比