Common Template Engine 发布版本 | 每日构建 >>  English | 中文
下载 更新 论坛 关于我们
文档
首页概览
模板指南
表达式指南
语法外套指南
配置指南
扩展指南
API使用指南
常见问题
对比其它模板引擎
集成
MVC框架集成
JSP标签集成
缓存策略集成
日志框架集成
数据格式集成
脚本引擎集成
邮件发送组件集成
第三方集成依赖包
工具
调试器说明
查看器说明
模板生成器说明
模板转换器说明
编辑器插件说明
代码生成器说明
开发
架构设计
开发规范
项目计划
需求场景
资源
下载
许可协议
更新日志
UML图
Java Doc
测试覆盖率报告
社区
开发团队
论坛
知识库
邮件列表
问题列表
报告问题

 
语法外套指南

一. 语法外套配置
(1) XML/HTML标签注释版语法外套
编译模板时自动去除指令两边的XML/HTML注释符。
如:(注: 注释符与指令间不能有空格)
<!--$if{users != null && users.size &gt; 0}-->...<!--$end{if}-->
注:如果在Web环境下,即:@extends=org/commontemplate/tools/web/commontemplate.properties,此语法外套默认开启,如需关闭,可配置:
commentSyntaxCoatAvailable=false
其它环境需配置:
textFilters[100]=org.commontemplate.standard.coat.CommentSyntaxCoatFilter()
#注释起始符
textFilters[100].begin=<!--
#注释结束符
textFilters[100].end=-->
#当指令所在行没有其它内容时,清除该空白行
textFilters[100].clearSpaceline=false
(注:此语法外套使用TextFilter扩展点实现,在编译期过滤文本)
(2) XML/HTML标签版语法外套
自动将名称空间为"ct:"的XML/HTML标签转换成指令,将"param"属性转换为表达式参数。
如:
块指令:(注:必须使用<xxx></xxx>方式调用)
<ct:if param="users != null && users.size &gt; 0">...</cf:if>
行指令:(注:必须使用<xxx/>方式调用)
<ct:out param="user.name" />
字符串参数:(注:字符串参数必须再加一层单引号, 否则表示变量)
<ct:msg param="'project.title'" />
注:如果在Web环境下,即:@extends=org/commontemplate/tools/web/commontemplate.properties,则只需配置开关:
tagSyntaxCoatAvailable=true
其它环境需配置:
sourceFilters[100]=org.commontemplate.standard.coat.TagSyntaxCoatFilter()
sourceFilters[100].syntaxSettings=$syntax
sourceFilters[100].namespace=ct
sourceFilters[100].expressionAttributeName=param
(注:此语法外套使用SourceFilter扩展点实现,在资源加载时使用简单的正则表达式替换,不解析HTML语法,没有不规则HTML语法兼容问题)
(3) XML/HTML标签属性版语法外套
自动将名称空间为"ct:"的XML/HTML标签属性转换成指令,
块指令将按先后顺序扩充到标签的两端,行指令将替换整个标签及其内部块,一个标签上只能有一个行指令属性。
如:
<table ct:if="users != null && users.size &gt; 0"><tr><td><span ct:out="user.name"></span></td></tr></table>
等价于:
$if{users != null && users.size > 0}<table><tr><td>$out{user.name}</td></tr></table>$end{if}
"if"块指令向外扩充到<table>标签的外面(如果有多个块指令,按顺序排列),而"out"行指令替换了整个<span>标签及其内部块
字符串参数:(注:字符串参数必须再加一层单引号, 否则表示变量)
<span ct:msg="'project.title'">XXX</span>
注:如果在Web环境下,即:@extends=org/commontemplate/tools/web/commontemplate.properties,则只需配置开关:
attributeSyntaxCoatAvailable=true
其它环境需配置:
sourceFilters[200]=org.commontemplate.standard.coat.AttributeSyntaxCoatFilter()
sourceFilters[200].syntaxSettings=$syntax
sourceFilters[200].directiveHandlerProvider=$directiveHandlerProvider
sourceFilters[200].namespace=ct
(注:此语法外套使用SourceFilter扩展点实现,在资源加载时使用jericho进行html解析,对不规则HTML语法的兼容性,以jericho的实现为准,需jericho.jar支持)
(4) Java/C++/C#代码注释版语法外套 (注:与上面的(1)语法外套实现相同)
编译模板时自动去除指令两边的Java/C++/C#代码注释符。
如: (注: 注释符与指令间不能有空格)
/*$if{xxx}*/ ... /*$end{if}*/
注:如果在代码生成器环境下,即:@extends=org/commontemplate/tools/generator/commontemplate.properties,此语法外套默认开启,如需关闭,可配置:
commentSyntaxCoatAvailable=false
其它环境需配置:
textFilters[100]=org.commontemplate.standard.coat.CommentSyntaxCoatFilter()
#注释起始符
textFilters[100].begin=/*
#注释结束符
textFilters[100].end=*/
#当指令所在行没有其它内容时,清除该空白行
textFilters[100].clearSpaceline=true

二. 语法外套举例:
(1) HTML标签注释版语法外套:
<html>
    <body>
        <!--$if{users != null && users.size &gt; 0}-->
        <table border="1">
            <!--$for{user : users}-->
            <tr>
                <td><!--${for.index + 1}--></td>
                <td><!--${user.name}--></td>
                <td><!--${user.coins}--></td>
                或者:(编辑时,显示占位内容)
                <td><!--$output{for.index + 1}-->1<!--$end--></td>
                <td><!--$output{user.name}-->james<!--$end--></td>
                <td><!--$output{user.coins}-->2.00<!--$end--></td>
            </tr>
            <!--$end-->
        </table>
        <!--$end-->
    </body>
</html>
(2) HTML标签版语法外套:
<html>
    <body>
        <ct:if param="users != null && users.size &gt; 0">
            <table border="1">
                <ct:for param="user : users">
                <tr>
                    <td><ct:out param="for.index + 1"/></td>
                    <td><ct:out param="user.name"/></td>
                    <td><ct:out param="user.coins"/></td>
                    或者: (out为行指令, output为块指令)
                    <td><ct:output param="for.index + 1">1</ct:output></td>
                    <td><ct:output param="user.name">james</ct:output></td>
                    <td><ct:output param="user.coins">2.00</ct:output></td>
                </tr>
                </ct:for>
            </table>
        </ct:if>
    </body>
</html>
(3) HTML标签属性版语法外套:
<html>
    <body>
        <table ct:if="users != null && users.size &gt; 0" border="1">
            <tr ct:for="user : users">
                <td><span ct:out="for.index + 1">1</span></td>
                <td><span ct:out="user.name">james</span></td>
                <td><span ct:out="user.coins">2.00</span></td>
            </tr>
        </table>
    </body>
</html>
(4) Java注释版语法外套:
package com.${project.company}.${project.name}.domain;
/*$if{project.framework != project.name}*/
import com.${project.company}.${project.framework}.domain.BaseEntity;
/*$end*/
public class ${entity.nameextends BaseEntity {
  /*$for{field : entity.fields}*/
  private ${field.type${field.name};

  public ${field.typeget${field.name.capitalize}() {
    return ${field.name};
  }

  public void set${field.name.capitalize}(${field.type${field.name}) {
    this.${field.name= ${field.name};
  }
  /*$end*/
}
 

版权所有 © 2007 - 2009 CommonTemplate 开发小组