My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
LiteXML  

Featured, Phase-Design
Updated Jun 12, 2011 by jind...@gmail.com

基本信息

Lite基本语法,命名为LiteXML,是一个基于XML的基本模板语法聚合,包括最基本的模板功能。

名称空间

LiteXML所属名称空间为:http://www.xidea.org/lite/core 推荐前缀是c。支持的标签有 :

ifelsechooseforvardefincludeextendsblock

支持模式

LiteXML支持标记,属性和文本三种模式,这里为了简单起见,只列出标记模式。

表达式输出语法

自动编码输出

  • 示例:
  • ${user.name}。
  • 功能:
  • 更具自身在XML文档中出现的位置,自动编码括弧内的表达式值的xml特殊字符并输出。
  • 说明:
  • 这个输出是自动编码的,如果在TextNode中,编码<&(允许>直接输出);如果在XML属性中,还要编码"'。若需要原始文本输出,如果在CDATA中,不会编码; 如果需要直接输出html/xml代码,可以使用:$!{html}语法
    • 模版表达式求值行为:
    • 表达式求值过程中是一个读取变量/常量,并可能对其做一些运算处理,返回一个唯一值的过程。

不编码直接输出

  • 示例
  • $!{user.name}
  • 功能:
  • 输出表达式原值(不编码),! 符号提醒您:这是未经过编码的值输出,可能包含危险代码。
  • 说明:
  • 与标准输出方式唯一的区别是:不编码。 因为输出的是未编码的字符串,可以包含危险的html源码,网页上容易引发XSS漏洞。实际编码过程中,应该尽量避免使用,在设计过程中也应该尽量避免不编码输出的需求,以便通过模板语法约束确保网页安全。

属性内表达式

  • 示例:
  • <input type="button"
            class="prefix-${className}"
    	onclick="${clickScript}"
    	onmouseover="${overScript}"/>
  • 功能:
  • 输出表达式值(自动编码),与自动编码输出不同的是,如果属性值不包含静态文本,仅有一个表达式且表达式值为null,则整个节点将不被输出。
  • 说明:
  • 这是基于XML的模板语法的一大亮点:条件输出属性的时候,在XML语法约束下,省去了繁琐条件判断。

控制标签

条件标签

  • 示例:
  • <c:if test="${index == 0}">[${index},</c:if>
    <c:else test="${index == end}">${index}]</c:else>
    <c:else>${index},</c:else>

选择标签

  • 示例:
  • <c:choose >
    	<c:when test="${type == 1}">分支1</c:when >
    	<c:when test="${type == 2}">分支2</c:when >
    	<c:otherwise>分支3</c:otherwise>
    </c:choose >
  • 功能:
  • 选择第一个条件执行,如果没有命中,执行c:otherwise节点。
  • 说明:
  • 这一系列标签其实和if else系列等价,翻译后的目标代码也万全相同。他们的出现,只是为了更加清晰的语法表现手段,而非内核功能的增加。

循环标签

  • 示例:
  • <c:for var="item" list="${list}">
    	${for.index}:${item}.
    </c:for>
    <c:else>没有找到任何记录</c:else>
  • for标签属性:
    • var : 字符串,且内容为合法变量名(Java/JavaScript)。
    • list : EL, 循环数据(早期版本中该属性名为:items),可以是数组或java,util.Collection 实例,也可以是整数(表示循环次数)。
    • status : 可选属性,表示状态变量名,是该循环内for状态的别名。
  • 功能:
  • 对list表达式中的数据循环,将每个元素依次申明为var中指定的名称的变量。 如果list表达式为整数时,var变量将自1开始,直至list值(可等于)结束。
  • for状态数据结构说明
  • {index:0,lastIndex:6}。
    循环过程中将维护for的状态(index属性),用户在循环体内使用${for.index}获取当前循环的重复次数(从0开始)。
  • else 标记说明:
  • 当其与for循环组合,当for循环执行0次后,与其配合的else节点可以执行(常见于做空循环的友好提示,如没有查询到任何数据)。

变量申明标签

通过属性值申明变量

<c:var name="myName" value="${user.name}" />
  • 属性表:
    • name : 变量名称。
    • value : El表达式(非必要,若无,取子节点渲染数据)
  • 功能:
  • 定义变量,内容来自value属性。

通过子节点申明变量

<c:var name="myName" >
	${user.firstName} ${user.lastName}
</c:var>
  • 功能:
  • 定义变量,变量名称是name属性,内容来自子节点输出的文本。

模板函数定义标签

模板中常见一些重复的逻辑,我们需要重用代码,编写模板函数是一种有效的用模板来扩充模板系统内置函数,做好代码重用的方法。
  • 示例:
  • <!-- 这里的内容会编译成文本处理函数,将插入到模板的默认变量集中 -->
    <c:def name="userRow(user)">
        <tr>
            <td>${user.name}</td>
            <td>${user.city}</td>
        </tr>
    </c:def>
    <!-- 使用函数 -->
    <table>
    <c:for var="user" list="${users}">
        $!{userRow(user)}
    </c:for>
    </table>
  • 属性表:
    • name :函数名称和参数定义。
  • 功能:
  • 定义一个文本渲染函数,并以函数名为变量名将其添加到模板内置变量集中,以后该模板就可以像其他内置函数一样调用这个自定义函数了。 自定义模板函数中不能访问出内置变量之外的其他模板变量,如需使用其他变量,需要将需要的变量作为参数传入。

编译期标签

包含标签

  • 示例:
  • <c:include path="menu.xhtml"/>
    <c:include path="controls.xhtml" xpath="//*[@id='pageList']"/>
    <c:include path="${page}" xpath="//xhtml:body"/>
  • 属性表:
    • path :字符串,可选,未指定时代表需要包含的文档为当前文档。可以是表示一个相对路径,也可以指定一个编译上文的变量(如,页面装饰其实现中,先将目标模板文档对象,作为编译上下文的${page}变量,能后解析布局模板)
    • xpath :字符串,可选,用于选取文档片段的xpath语句。
  • 功能:
  • 包含一个文档,或者文档片段。
  • 说明:
  • xpath确实有点烦琐,但毕竟事标准,标准永远不是最好的,但他是可行的。

继承标签

  • 示例:
  • #标签语法
    <c:extends path="parent.xhtml">
       <c:block name="member1">....</c:block>
    </c:extends>
  • 属性表:
    • path :用于<c:extends 标签,字符串,必选,用于指定需要继承的父模板路径。
    • name :用于<c:block 标签,用于指定区域名称。
  • 功能:
  • 从继承父模板开始渲染,遇到c:block节点时,从子页面寻找同名替代节点,取代父模板的同名节点。
Comment by wudalong@gmail.com, Feb 19, 2011
<c:for var="item" list="${list}">
        ${for.index}:${item}.
</c:for>
<c:else>没有找到任何记录</c:else>

for的list属性好像不行,应该是items,不知道从什么版本开始的。在这个地方被折腾了好几个小时了。

Comment by project member jind...@gmail.com, Jun 3, 2011

2.0开始用list取代items, 原因是list 这个名字更常见,也好写.


Sign in to add a comment
Powered by Google Project Hosting