## 2.16 直接運行Beetl腳本
Beetl模板本質上會轉化為Beetl腳本來執行,這點跟jsp轉為servlet來執行類似。BeetlSQL支持3種運行腳本方式
### 2.16.1 javax.script.ScriptManager 集成
Beetl集成了javax.script.ScriptManager,可以更為方便的使用腳本語言
```java
//初始化部分,beetlEngine應該做為單例使用
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine beetlEngine = scriptEngineManager.getEngineByName("beetl");
//一個簡單例子
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("arg",arg);
Map map = null;
try {
map = (Map)beetlEngine.eval("return arg.age+(arg.pay+12);",simpleBindings);
return map.get("return");
} catch (ScriptException e) {
System.out.println(e);
}
```
執行腳本完畢后,返回到Map里的值可能包含如下:
- 模板的**頂級**的臨時變量,key為臨時變量名,value為值
- return 將返回到map里 ,key為"return"
異常e是ScriptException的子類BeetlScriptException,異常信息包含了具體的異常,異常位置。
### 2.16.2 Scriipt對象 直接調用
在上面的例子,BeetlScriptEngine是ScriptEngine的子類,他實際執行了Beetl的內置的Script功能。,可以掉用getScript方法獲取Script對象
```java
StringTemplateResourceLoader loader = new StringTemplateResourceLoader();
GroupTemplate gt = getGroupTemplate(); //假設從某處獲GroupTemplate
String str = "var a=1+b;return a;"
Script script = gt.getScript(str,loader); //必須使用StringTemplateResourceLoader記載字符串腳本
Map map = new HashMap();
map.put("b",2);
script.binding(map);
script.execute();
if(script.isSuccess()){
return script.getResult(); //返回Map,包含了變量a,以及變量"return"
}
ErrorInfo error = script.getErrorInfo();
System.out.println(error) //打印出錯詳情
```
注意:這種方式性能比集成ScriptManager稍微好些。
也可以獲取Script對象后,調用validate方法驗證模板本生是否語法合格
```java
String str = "var a=1+b;return a;"
Script script = gt.getScript(str,loader);
BeetlExeception ex = script.validate();
if(ex!=null){
ErrorInfo error = new ErrorInfo(ex) //轉化成更好處理的ErrorInfo對象
System.out.println(error) //打印出錯詳情
}
```
對于集成ScriptEngine的例子,你可以獲得Script對象做校驗
```java
BeetlScriptEngine beetlEngine = (BeetlScriptEngine)scriptEngineManager.getEngineByName("beetl");
Script script = beetlEngine.getScript(strScript);
//其他代碼同上
```
### 2.16.3 GroupTemplate直接調用
GroupTemplate提供方法可以直接執行Beetl腳本,直接得出結果(不推薦了)
- public Map runScript(String key, Map<String, Object> paras) throws ScriptEvalError
- public Map runScript(String key, Map<String, Object> paras, Writer w) throws ScriptEvalError
- public Map runScript(String key, Map<String, Object> paras, Writer w, ResourceLoader loader) throws ScriptEvalError
key為資源名,這里是腳本字符串,paras為腳本的全局變量,w可選參數,如果執行腳本有輸出,則輸出到w里,loader參數可選,如果指定,則使用此laoder加載腳本
執行腳本完畢后,返回到Map里的值可能包含如下:
- 模板的**頂級**的臨時變量,key為臨時變量名,value為值
- return 值將返回到map里 ,key為return
如下腳本(此時就不需要腳本定界符了)
```javascript
var a = 1;
var b = date();
var c = '2';
return a+1;
```
調用runScript后,map里將返回key分別為a,b,c,return。 值分別為1,當前日期,字符串'2,以及3。
groupTemplate.validateScript 可以用于校驗模板是否正確,如果不正確,返回BeetlException
~~~java
BeetlException ex = groupTemplate.validateScript(script);
if(ex!=null){
ErrorInfo info = new ErrorInfo(ex);
System.out.println(info.toString());
}
~~~
- 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 性能測試對比