JFinal集成Beetl静态模板

话说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");
	}

该方法的作用为JFinal框架中常量配置方法,这里我自定义的MyBeetlRenderFactory类继承于BeetlRenderFactory,如下:

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";
	}
}

由于BeetRenderFactory默认使用的FileResourceLoader,其根目录位于WebRoot下,如果需要修改其他目录下,需要在src下创建一个beetl,properties的属性文件,在该文件中配置如下代码:

RESOURCE.root=/WEB-INF/view

因为Beetl默认的配置文件在org/beetl/core/beetl-default.properties,Beetl启动时会通过Configuration类加载,然后再加载classpath中的beetl.properties,如果自己创建的beetl.properties文件,那么回后者会将前者覆盖

到这里呢,Jfinal集成Beetl模板就算完成了,接下来看下实现的效果,如下:

public void index(){
		List<Users> 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){%>
		<tr>
			<td>${testLP.index}</td>
			<td>${test.id}</td>
			<td>${test.username!''}</td>
		</tr>
	<%}%>

看到这样的输出,是不是有种熟悉的感觉,对了,与jsp的小脚本差不多的标签,但是还是不要搞混了

大家可能也看到了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;i++){%>
		<tr>
			<td>${testList.~size}</td>
			<td>${testList[i].id}</td>
			<td>${testList[i].username!''}</td>
		</tr>
	<%}%>

while

<%var i=0;while(i<testList.~size){%>
		<tr>
			<td>${testList.~size}</td>
			<td>${testList[i].id}</td>
			<td>${testList[i].username!''}</td>
		</tr>
	<%i++;}%>

对于for循环来说,是没有进入循环体中时,则进入elsefor语句块,所以elsefor不能狗单独使用

<%for(var i=0;i<testList.~size;i++){%>
		<tr>
			<td>${testList.~size}</td>
			<td>${testList[i].id}</td>
			<td>${testList[i].username!''}</td>
		</tr>
	<%}elsefor{%>
		<tr>
			<td colspan="3">没有记录</td>
		</tr>
	<%}%>

接下来聊聊条件语句,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 来获取可能的错误信息
也可以省略catch部分,这样出现异常,不做任何操作

Beetl模板判断变量是否存在可以使用has与isEmpty

简单的Beetl模板操作就到这里了,需要了解其他的使用,在下载的包中有官网文档





  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Beetl相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下: 1、功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。 2、非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。 3、超高的性能:Beetl 远超过主流java模板引擎性能,如5-6倍于freemarker,2倍于传统jsp技术。而且消耗较低的CPU 4、易于整合Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。 5、支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。 6、扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签。同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包。 关于性能: 通过与主流模板引擎Freemarker,Velocity以及JSP对比,Beetl均远高于前面三个,这是因为宏观上,通过了优化的渲染引擎,IO的二进制输出,字节码属性访问增强,微观上,通过一维数组保存上下文,合并静态文本,通过重复使用字节数组来防止java频繁的创建和销毁数组,还使用模板缓存,运行时优化等方法。 独特功能: Beetl有些功能是发展了10多年的模板引擎所不具备的,这些功能非常利于模板的开发和维护,如下: 1、自定义占位符和控制语句起始符号,这有利于减小模板语法对模板的倾入性,比如在html模板中,如果定义控制语句符号是,那么,大部分模板文件都能同过浏览器打开。有的使用者仅仅采用了单个符号@ 以及回车换号作为控制语句起始符号,这又能提高开发效率。 2、可单独测试的模板。无需真正的控制层和模型层,Beetl模板就可以单独开发和测试。 3、同时支持较为松散的MVC和严格的MVC,如果在模板语言里嵌入计算表达式,复杂条件表达式,以及函数调用有干涉业务逻辑嫌疑,你可以禁止使用这些语法。 4、强大的安全输出,通过安全输出符号!,能在模板变量,变量属性引用,for循环,占位符输出,try-catch中等各个地方提供安全输出,保证渲染正常。 5、模板变量:运行将模板的某一部分输出像js那样赋值个一个变量,稍后再处理。利用模板变量能完成非常复杂的页面布局(简单的布局可使用layout标签函数)。 6、类型推测,能在运行的时候推测模板变量类型,从而优化性能,也可以通过注解的方法显示的说明模板变量属性(这是非必须的,但有助于IDE自动提示功能)。 7、可插拔的设计,错误信息提示,模板引擎缓存机制,模板资源管理,本地调用的安全管理器,严格MVC限制,模板引擎本身都有默认的实现,但又完全可以自定义以适合特定需求。 8、增强的语法,如#ajax局部渲染,for-elsefor, select-case,安全输出符号! 等,这些语法特别适合模板开发。 9、性能超高,具有最快的模板解释引擎,同时,又有较低的CPU消耗。适合各类模板引用,如CMS系统,超高访问量的门户系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老虎Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值