阅读更多

9顶
0踩

编程语言

原创新闻 CommonTemplate0.8.0发布

2008-01-05 13:12 by 正式记者 javatar 评论(1) 有3225人浏览
在元旦之夜发布了0.8.0
http://www.commontemplate.org

增加了与struts及struts2的集成sample, (见下载列表中的commomtemplate-sample-0.8.0.zip)


将宏指令的特殊前缀语法去掉, 改成命名约定:

受FreeMarker影响, 它使用仿XML的:
<@mymacro/>
<@mymacro>...</@mymacro>

使自定义宏可以用行指令及块指令两种方式调用,
当以块指令调用时, 可以用<#nest>回调内部块,
(注:<#include>等内置行指令不需要/>结尾)

基于同样的思路, CommonTemplate采用了:
$-mymacro{xxx}
$+mymacro{xxx}...$end

减号前缀表示行指令调用, 加号前缀表示块指令调用,相当于引入了特殊语法.

这是因为指令的解析在编译期就要决定是行指令还是块指令,
而宏的定义在运行期才能获取. 所以需要标识告诉引擎怎么解析.

然而, 思索良久发现, 一个宏要不就是行指令, 要不就是块指令,
很少把一个行指令用块指令调用,或把一个块指令用行指令调用,
如:
$macro{"mybutton"}
<input type="button" value="${name}" />
$end

这个宏肯定会用行指令调用,而
$macro{"mytable"}
<table>
    $inner (注:相当于freemarker的nested)
</table>
$end

这个宏肯定会以块指令调用, 因为它用了inner回调,
也就是说,是行指令,还是块指令,应该在宏定义时就已经决定了,而不是在调用时决定,

所以决定采用命名规则判断是否为块指令(规则可配置)
默认规则为:
以"_block"结尾的宏指令为块指令,如:
$macro{"mytable_block"}
<table>
    $inner
</table>
$end


调用方式与普通指令一模一样, 也就是无特殊语法:
块指令调用:
$mytable_block
    <tr><td></td></tr>
$end

行指令调用:
$mybutton{name: "Query"}


这样,是行指令,还是块指令,在定义时就决定了,也便于理解,
而引擎可以通过匹配命名规则来解析指令树.
9
0
评论 共 1 条 请登录后发表评论
1 楼 lihuiinsect 2008-01-05 21:08
:lol:

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java 使用GregorianCalendar类获取系统的当前时间

    java 使用GregorianCalendar类获取系统的当前时间 java 使用GregorianCalendar类获取系统的当前时间

  • 多线程下小心使用GregorianCalendar

    不要让每个线程都去生成GregorianCalendar的对象,会导致并发性问题。因为GregorianCalendar的无参构造函数会调用TimeZone.getDefault(),而这个函数是static的并且synchronized的.

  • Java中的GregorianCalendar日期类

    简介: Calendar类是一个抽象类,提供计算日期的常见相关方法,而GregorianCalendar是它的一个具体子类,提供了世界上大多数地区使用的标准日历系统。 注意:Java中月份是从0开始,即0表示1月;周日是数字1,以此类推; 常用方法: 方法 说明 new GregprianCalendar(年,月,日,时,分,秒) 可以没有任何参数或部分参数,通过后面的方法进行设置

  • Java 日期和时间(二)Calendar、GregorianCalendar、TimeZone等

    上一期我们说了类,这期我们聊聊和。

  • JavaSE基础之-Calendar时间类

    本篇目录:一:Calendar类二.常用方法 一:Calendar类 Calendar来源于Java.util包下 Calendar是一个抽象类(抽象类不能实例化) Calendar通过Calendar.getInstance()获得 Calendar rightNow = Calendar.getInstance(); 二.常用方法

  • Calendar日历类和GregorianCalendar公历类用法的一个小结

    日历类 主要涉及两个类,一个就是抽象类 Calendar类,另一个是他的子类GregorianCalendar。 一、Calendar类。 1,主要字段: YEAR(年份)                                            MONTH(月份从0开始)                          DATE(一月的某天)

  • Java----GregorianCalendar

    java.util.Calendar 抽象方法描述 #Calendar() 创建一个默认日历 +get(field) 返回一个给定日历域的值 +set(year, month, date) 使用给定的年月日设置日历,月份从0开始,0代表1月 +setTime(date) 使用Date对象设定该日历 GregorianCalendar 构造方法描述 G...

  • java学习笔记42:Calendar类和GregorianCalendar类的使用、可视化日历的编写

    &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。   GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。 菜鸟雷区   注意月份的表示,一月是0,二月是1,以此类推,12月是11。

  • 利用Java制作万年历(新手简易版)

    2.创建成员方法calendar,利用该方法计算每个月的天数,起始星期数(获取每月天数也可以用getActualMaximum(Calendar.DAY_OF_MONTH)来实现,图片中方式更加倾向于像我一样的新手)1.创建MyCalendar类,定义类中拥有两个属性为year和month。3.构建create成员方法,利用for循环语句进行月历格式的编撰。结尾出现的create函数也是自己构建的,在下一部分。从键盘输入年份,可直接实现输出当年所有月份月历。4.新手上机,希望大佬们多多指正修改。

  • new操作的性能问题

    new操作是我们常用的堆空间分配方法,可以说离了它,我们基本写不出可用的工程代码。可是一切内存问题却皆源于此:     1、内存碎片化:有足够的内存,却申请不到整块的空间;     2、性能低下:new操作是考虑到多线程安全的,因此,调用时增加的多线程安全的负担;在堆空间上分配内存时,进程要进行内核态切换,又增加了额外的开销;     3、内存丢失:不用说,忘记delete的对象一直占据着堆

  • Java8 DateTime与1582历法问题

    事情经过今天下午在研究mybatis对jsr310的支持, 跟往常一样我准备了一个MySQL测试用的数据表, 里面有些DATETIME列, 默认值是’0000-01-01 00:00:00’, 映射Java类中的create_time等这样的java.time.OffsetDateTime属性. 当我测试的时候我就整个蒙圈了, 某些字段插入我是用OffsetDateTime.now()指定, 这些数

  • 第九章第五题(使用GregorianCalendar类)(Use GregorianCalendar class)

    第九章第五题(使用GregorianCalendar类)(Use GregorianCalendar class) *9.5(使用GregorianCalendar类)Java API中有一个位于包java.util中的类GregorianCalendar,可以使用它获得某个日期的年、月、日。他的无参构造方法构建一个当前日期的实例,get(GregorianCalendar.YEAR)、get(GregorianCalendar.MONTH)和get(GregorianCalendar.DAY_OF_M

  • GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

    GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家/地区是在 1582 年 10 月 15 日创立,在其他国家/地区要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。 历史上,在那些首先采用格里高利历的国家/

  • java中GregorianCalendar类的使用

    摘自《java核心技术 卷1》中的代码,觉得源码还是有点啰嗦,也可能是我jib

  • 使用公历类GregorianCalendar

    重点内容# 使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14输入样例 :1450921070108输出样例:2015-11-24程序源码

  • Java中Date,Calendar,GregorianCalenda

    本文中提到的内容: 1.具体类(相对于抽象类)java.util.Date 2.java.util.Calendar抽象类及其子类java.util.GregorianCalendar Date类: 在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化,比如规定了周日为一天中的第0天,月份也是从0开始,而年份更是减去了1990后的值。从 JDK 1.1 开始,应该使用 Calend

  • JAVA菜鸟入门篇 - Calendar日历类和GregorianCalendar公历类 (二十八)

    Calendar日历类和GregorianCalendar公历类  相应的API文档:Calendar类和GregorianCalendar类 人们对于时间的认识是:某年某月某日,这样的日期概念。计算机中时间是用long类型表示的。两者之间通过Calendar搭起桥梁。 Calendar类和GregorianCalendar类的关系: java.lang.O

Global site tag (gtag.js) - Google Analytics