阅读更多

9顶
0踩

编程语言

原创新闻 CommonTemplate0.8.0发布

2008-01-05 13:12 by 正式记者 javatar 评论(1) 有3228人浏览
在元旦之夜发布了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中1000个常用类:GregorianCalendar类,你学会了吗?

    类是java.util包中的一个具体类,它是Calendar类的一个子类,提供了操作和计算日期的方法。使用格里高利历,是 Java 默认的日历系统。// 构造方法和主要方法省略。

  • GregorianCalendar类

    GregorianCalendar类 Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。 Calendar的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianC...

  • Java日期,日期格式,历法的小总结(菜鸟的我学习Java,欢迎批评指正哦)

    package JavaTest;import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; impo

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

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

  • Java——GregorianCalendar类

    Java中将记录时间的类与表示日期的类分开,分别为表示时间点信息的Date类;表示人们所熟悉的公历表示法的GregorianCalendar类 创建GregorianCalendar对象: new GregorianCalendar(); new GregorianCalendar(1999, 11, 31); new GregorianCalendar(1999,Calendar.DECEMBER,31); new Greg...

  • JavaSE基础之-Calendar时间类

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

  • 碰到的一个关于GregorianCalendar类的问题

    在myeclipse上编辑如下代码,一个简单的调用GregorianCalendar类的实例,居然碰到不同的问题; 首先: import java.util.*; public class GregorianCalendar { public static void main(String[] args) { GregorianCalendar gc=new GregorianCalen

  • 总结一下GregorianCalendar

        我用System.out.println(calendar);得到了GregorianCalendar 的结果:java.util.GregorianCalendar[time=1158930431859,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/

  • Java----GregorianCalendar

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

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

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

  • Java的日期与时间之java.util.Calendar和GregorianCalendar简介说明

    Java的日期与时间之java.util.Calendar和GregorianCalendar简介说明

  • new操作的性能问题

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

  • Java、使用GregorianCalendar类

    package pack2; import java.util.GregorianCalendar; public class UsageOfCalendar { public static void main(String[] args) { GregorianCalendar gCalendar = new GregorianCalendar(); System.out.println("Year: " + gCalendar.get(GregorianCalendar....

  • Java实现简单的阳历日历

    Java实现简单的阳历日历及对应星期。平年与闰年小知识。

  • 使用公历类GregorianCalendar

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

  • 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

  • java中的GregorianCalendar类

    Java中将记录时间的类与表示日期的类分开,分别为表示时间点信息的Date类;表示人们所熟悉的公历表示法的GregorianCalendar类         GregorianCalendar类提供的方法有很多,而构造其对象的方式也很多           创建GregorianCalendar对象          new GregorianCalendar();          n

Global site tag (gtag.js) - Google Analytics