话说Beetl模板框架比Freemarker模板还要快,至于到底怎么样,目前还没有感觉到,不管那么多了,上手再说。
首先需要下载beetl包:Beetl模板路径
Beetl提供JFinal框架的集成,使用BeetRenderFactory类,通过如下代码注册即可完成集成:
@Override
public void configConstant(Constants me) {
loadPropertyFile("jdbc.properties");
//配置模板
me.setMainRenderFactory(new MyBeetlRenderFactory());
//获取GroupTemplate模板,可以设置共享变量操作
GroupTemplate groupTemplate=MyBeetlRenderFactory.groupTemplate;
me.setDevMode(getPropertyToBoolean("config.devModel", false));
me.setViewType(ViewType.JSP);
me.setEncoding("UTF-8");
}
package com.tenghu.core.beetl;
import org.beetl.ext.jfinal.BeetlRender;
import org.beetl.ext.jfinal.BeetlRenderFactory;
import com.jfinal.render.Render;
public class MyBeetlRenderFactory extends BeetlRenderFactory{
@Override
public Render getRender(String view) {
BeetlRender render=new BeetlRender(groupTemplate, view);
return render;
}
@Override
public String getViewExtension() {
return ".html";
}
}
RESOURCE.root=/WEB-INF/view
到这里呢,Jfinal集成Beetl模板就算完成了,接下来看下实现的效果,如下:
public void index(){
List testList=Users.dao.find("select * from users");
setAttr("testList", testList);
render("login.html");
}
这里我输出的是login.html页面,该页面在WEB-INF/view中,看着是不是很方便,如果不自己配置beetl.properties文件,那么render这个地方就需要写WEB-INF/view/login.html,一个项目中肯定有很多页面,如果不配置beetl.properties文件,每个输出到界面的页面都要使用完整的路径,就会觉得是一件特麻烦的事,配置beetl.peoperties文件就减少了重复的工作
上面也看到了,这里我输出的是一个集合,那么使用Beetl模板怎么对集合进行遍历呢,很简单,如下:
<%for(test in testList){%>
${testLP.index}
${test.id}
${test.username!''}
<%}%>
大家可能也看到了testLp这个变量,该变量是beetl隐含定义的变量,能在循环体内使用,其命名规范是item加上LP能提供当前循环的信息,如:
testLP.index;当前的索引,从1开始
testLP.size;集合的长度
testLP.first;是否是第一个
testLP.last;是否是最后一个
testLP.even;是否是偶数个
testLP.odd;是否是奇数个
在Beetl模板中对循环操作不止上面一个,上面的for循环的形式是for-in,接下来还有:
for(exp;exp;exp)
while
elsefor
使用如下:
for(exp;exp;exp)
<%for(var i=0;i
${testList.~size}
${testList[i].id}
${testList[i].username!''}
<%}%>
<%var i=0;while(i
${testList.~size}
${testList[i].id}
${testList[i].username!''}
<%i++;}%>
<%for(var i=0;i
${testList.~size}
${testList[i].id}
${testList[i].username!''}
<%}elsefor{%>
没有记录
<%}%>
接下来聊聊条件语句,Beetl中的条件语句有:
if-else
switch-case
select-case
具体使用如下:
<%
var a=true,b=1;
if(a&&b==1){
}else if(a){
}else{
}
%>
switch-case:
<%
var b=1;
switch(b){
case 0:
print('1');
break;
case 1:
print('2');
break;
case 2:
print('2');
break;
default:
print('error');
break;
}
%>
switch可以支持任何类型
select-case 是switch case的增强版。他允许case 里有逻辑表达式,同时,也不需要每个case都break一下,默认遇
到合乎条件的case执行后就退出。
<%
var b=1;
select(b){
case 0,1:
print("it's small int");
case 2,3:
print("it's big int");
default:
print("error");
}
%>
如果在使用模板的过程中出现异常,可以使用try-catch处理,如下:
<%
try{
var a=10;
var b=0;
print(a/b);
}catch(error){
print("出现异常:"+error.message);
}
%>
error代表了一个异常,你可以通过error.message 来获取可能的错误信息
Beetl模板判断变量是否存在可以使用has与isEmpty
简单的Beetl模板操作就到这里了,需要了解其他的使用,在下载的包中有官网文档