|
|
语法外套指南 |
|
一. 语法外套配置
(1) XML/HTML标签注释版语法外套
编译模板时自动去除指令两边的XML/HTML注释符。
如:(注: 注释符与指令间不能有空格)
<!--$if{users != null && users.size > 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 > 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 > 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 > 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 > 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 > 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.name} extends BaseEntity {
/*$for{field : entity.fields}*/
private ${field.type} ${field.name};
public ${field.type} get${field.name.capitalize}() {
return ${field.name};
}
public void set${field.name.capitalize}(${field.type} ${field.name}) {
this.${field.name} = ${field.name};
}
/*$end*/
}
|
|
|
|