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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python输出语句print用法_python print输出

    python输出语句print用法_python print输出【时间】2018.10.12【题目】python中的print输出函数用法总结 一、直接输出无论什么类型,数值,布尔,列表,字典…都可以直接输出,或者先赋值给变量,再输出。  二、格式化输出下面是《Python基础编程》中对格式化输出的总结:(1).%字符:标记转换说明符的开始(2).转换标志:-表示左对齐;+表示在转换值之前要加上正负号;“”(…

    2025年7月10日
    2
  • 用MDK生成bin文件的步骤及方法

    用MDK生成bin文件的步骤及方法1用MDK生成bin文件Embest徐良平在RVMDK中,默认情况下生成*.hex的可执行文件,但是当我们要生成*.bin的可执行文件时怎么办呢?答案是可以使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*.axf格式的文件转换成*.bin格式的文件。下面将具体

    2022年10月20日
    4
  • 死人现在在做死事「建议收藏」

    死人现在在做死事「建议收藏」现在和死人没什么差别了,今晚要对6000条数据进行整理,对这些数据进行分类本来应该是属于一个商业智能分类的事情,可公司里没一个会数据挖掘的,都对这堆数据没有办法,现在只能靠我们这些死人来死扛着,人工在对它进行分类,看来真是要得去西天看米罗佛去了看下这个数据,吓死你们客户来电反映本机在7811145/03…

    2022年10月7日
    3
  • 项目启动,无法加载Spring xsd文件

    项目启动,无法加载Spring xsd文件问题的产生:有个Java项目(Jar文件),每半小时重启一次,对外提供服务。突然收到报警,早上5点半重启服务时出错,服务无法正常启动。查看启动日志,错误是xml解析失败,无法找到xml元素的声明。具体报错日志如下:INFO:LoadingXMLbeandefinitionsfromclasspathresource[applicationContext-task

    2025年8月5日
    4
  • java getclassloader_关于getClass(),Object.class,getClassLoader的理解

    java getclassloader_关于getClass(),Object.class,getClassLoader的理解1、对Class类的理解:Class类包含了类的信息,如构造方法、方法、属性,可用于反射。以下是所有方法2、获取Class类对象的几种方法:Testtest=newTest();(1).test.getClass();在运行时确定,所以运行实例才是该类对象。super.getClass()不能获得父类的类对象,仍然是当前类对象。获得父类类对象:test.getClass().getSup…

    2022年6月11日
    22
  • openssl 创建 pfx 证书

    openssl 创建 pfx 证书环境:centos7.6,openssl1.02k-fips生成私钥[root@ansible002keyfile]#opensslgenrsa-outserver.key1024GeneratingRSAprivatekey,1024bitlongmodulus……++++++…++++++eis65537(0x10001)生成证书请求文件,需要填写信息,例如:cn/gd/zh/sourcecode/bdc/www.a.com[root@

    2022年5月2日
    47

发表回复

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

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