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模板操作就到这里了,需要了解其他的使用,在下载的包中有官网文档

JFinal集成Beetl静态模板

时间: 2024-10-28 17:39:13

JFinal集成Beetl静态模板的相关文章

SpringBoot集成beetl模板快速入门

SpringBoot集成beetl模板快速入门 首次探索 beetl官方网址:http://ibeetl.com/ 创建SpringBoot工程(idea) 新建工程 选择创建Spring工程 书写包名和项目名称等 选择集成web依赖 确认项目保存路径信息 修改maven本地仓库位置 maven本地仓库位置,默认在C盘的: "C:\Users\用户名 ?.m2\repository" 可以复制maven工程下的setting.xml修改其文件,详情见该博客 http://blog.cs

cumulocityiot mqtt静态模板

MQTT静态模板 总览 为了简化设备集成,Cumulocity IoT已经支持许多静态模板,任何客户端都可以使用它们,而无需创建自己的模板.这些模板专注于用于设备管理目的的最常用消息. 要使用下面列出的模板,您需要将消息发布到主题s/us(t/us用于临时处理已发布内容,q/us用于静态处理已发布内容或c/us用于CEP处理已发布内容.有关更多信息,请参阅参考指南中的SmartREST>处理模式.信息. 您需要预订主题s/ds才能接收使用静态模板的操作. 自动创建设备 静态模板主题支持自动创建设

AngularJS初始化静态模板

AngularJS可以通过ng-app来自动初始化模块,也可以通过angular.bootstrap(document, [module])手动启动应用,不管用哪种方法,应用启动后,动态往dom树里面添加的dom元素,无法执行angular指令,即无法通过ng-model.ng-click给动态添加的dom元素绑定数据和事件,怎么办? 动态添加dom元素的场景非常常见,如点击某页面上修改用户资料的按钮,发送ajax请求去查询用户资料,然后通过模板引擎将事先写在页面里的静态模板编译成HTML字符串

2016最新京东商城首页静态模板下载

2016最新京东商城首页静态模板下载 预览 百度云盘下载

Angular系列----AngularJS入门教程02:静态模板(转载)

为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两个手机的基本信息,用以下命令将工作目录重置到步骤1. git checkout -f step-1 请编辑app/index.html文件,将下面的代码添加到index.html文件中,然后运行该应用查看效果. app/index.html <ul> <li> <span>

jfinal集成cas单点认证实践

本示例jfinal集成cas单点认证,采用获取到登录用户session信息后,在本地站点备份一份session信息,主要做以下几个步骤: 1.站点引入响应jar包: 2.在web.xml中配置对应过滤器: 3.增加拦截handler,并在jfinal的config中配置. 此次示例在handler中获取登录用户session,并设置本站点session. 详细介绍如下: 1.引入jar包 需要引入两个jar包:cas-client-core-3.2.2.jar和commons-logging-1

JFinal集成Spring

JFinal框架也整合了Spring框架,下面实现JFinal怎么去配置Spring框架.在JFinal中整合Spring使用到的类是SpringPlugin和IocInterceptor类 SpringIplugin类: SpringPlugin 是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置SpringPlugin,以下是 Plugin 配置示例代码: @Override public void configPlugin(Plugins

[转载]AngularJS入门教程01:静态模板

为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两个手机的基本信息,用以下命令将工作目录重置到步骤1. git checkout -f step-1 请编辑app/index.html文件,将下面的代码添加到index.html文件中,然后运行该应用查看效果. app/index.html <ul> <li> <span>

springboot项目实现excel静态模板下载

excel静态模板下载,有两种方式:第一种,在http头中指定输出文件流的类型为"application/vnd.ms-excel"类型时,输出流时就不需要添加输出文件的后缀名:第二种,指定文件流的类型为"multipart/form-data"时,输出流时需要判断文件是.xls/.xlsx,并且加上后缀名. 1.方式一: controller层代码: @GetMapping("/download") public Result<Strin