## 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 性能测试对比