java的模板引擎_java模板引擎

java的模板引擎_java模板引擎目前功能已经全部完成了 暂定名字为 ayada Ayada 是一个 java 版的模板引擎 支持 jstl 语法 支持 el 表达式 支持自定义标签 1 基本使用 webapp 代表应用根目录 如果页面使用了 t include 指令 则根目录必须指定 TemplateCont 对模板进行管理 默认情况下模板在修改 5 分钟之后重新编译 因此 TemplateCont 对象在应用中应该是

目前功能已经全部完成了,暂定名字为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/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230385.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月26日 下午4:01
下一篇 2026年2月26日 下午4:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号