java的模板引擎_java模板引擎

目前功能已经全部完成了,暂定名字为ayada.

Ayada是一个java版的模板引擎, 支持jstl语法, 支持el表达式. 支持自定义标签.

1. 基本使用

// webapp代表应用根目录

// 如果页面使用了t:include指令, 则根目录必须指定

// TemplateContext对模板进行管理, 默认情况下模板在修改5分钟之后重新编译,

// 因此TemplateContext对象在应用中应该是单粒.

TemplateContext templateContext = new TemplateContext("webapp");

Template template = templateContext.getTemplate("/user/userList.tml");

StringWriter writer = new StringWriter();

PageContext pageContext = JspFactory.getPageContext(writer);

List

userList = UserHandler.getUserList(16);

pageContext.setAttribute("userList", userList);

DefaultExecutor.execute(template, pageContext);

System.out.println(writer.toString());

2. 自定义标签

在classes目录下建taglib.tld文件, 内容如下:

## ---- compile tag ----

t:taglib com.skin.ayada.jstl.core.LibTag

## ---- jstl.core ----

## default tag support

c:if com.skin.ayada.jstl.core.IfTag

c:set com.skin.ayada.jstl.core.SetTag

c:out com.skin.ayada.jstl.core.OutTag

c:each com.skin.ayada.jstl.core.ForEachTag

c:forEach com.skin.ayada.jstl.core.ForEachTag

c:choose com.skin.ayada.jstl.core.ChooseTag

c:when com.skin.ayada.jstl.core.WhenTag

c:otherwise com.skin.ayada.jstl.core.OtherwiseTag

c:comment com.skin.ayada.jstl.core.CommentTag按照该格式添加自定义标签即可.

自定义标签支持两种引入方式.

全局引入: 在taglib.tld文件中定义的都是全局标签

局部引入: 在页面中引入, 使用

局部引入的方式要求必须全局引入t:taglib(t:taglib可以在taglib.tld文件中修改为其他名字)

建议使用全局引入的方式.

3. el表达式

el表达式解析采用的是ognl, ognl在对不存在的对象进行解析的时候会抛异常, 为了避免在页面中有过多的null检查

因此对这种异常进行了屏蔽, 屏蔽的方式请参看ExpressionContext:

// 此处覆盖了OgnlContext的get方法

@Override

public Object get(Object key)

{

Object value = this.pageContext.getAttribute(key.toString());

// 如果此处拿到的对象为空, 则返回一个空的Map对象

if(value == null)

{

return new HashMap();

}

return value;

}

4. 模板页面示例

------------------------------------------------------------

test

c:cout test

${user.userName}

c:if test

1 == 1

c:each test

${varValue}

my:hello test

新添加了filter支持,这样不需要把模板渲染的代码写到servlet了,只需要配置一个filter即可

TemplateFilter

com.skin.ayada.filter.TemplateFilter

home

/template

TemplateFilter

/template/*

FORWARD

servlet示例

public class HelloServlet extends HttpServlet{

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

List userList = null; // userManager.getUserList();

request.setAttribute("userList", userList);

// forward之后会被TemplateFilter拦截进行模板渲染

request.getRequestDispatcher("/template/user/userList.html").forward(request, response);

}

}

下载地址: https://code.google.com/p/ayada/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值