-
Notifications
You must be signed in to change notification settings - Fork 3
BaseSyntax[中文]
jindw edited this page Nov 27, 2016
·
1 revision
##变量/表达式输出
示例:
${user.name}。
功能:
根据表达式自身在HTML/XML 文档中出现的位置,自动编码括弧内的表达式值的html/xml特殊字符并安全输出。
说明:
这个输出是自动编码(防XSS漏洞)的,如果在文本节点中,编码<&(允许>直接输出);如果在XML属性中,还要编码"'。若需要原始文本输出,如果在CDATA中,不会编码; 如果需要直接输出html/xml代码,可以使用:$!{html}语法(可以包含危险的html源码,网页上容易引发XSS漏洞。需谨慎考虑)
##条件标签 示例:
<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="test.tpl"/>
属性表:
* path 指定包含的目标文件
实例:
<c:include path="test.tpl" selector="h2,p,*[id='content']"/>
属性表:
* path 指定包含的目标文件
* selector 指定css3 选择器, 可同时指定多个选择器(用',' 分割)。 模板在当前位置插入全部命中选择器的节点。
##模板继承: Example1:
<!-- the current.html -->
<c:extends path="parent.xhtml">
<c:block name="title">Real Title</c:block>
<c:block name="content">New Content...</c:block>
</c:extends>
<!-- the parent.html -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><c:block name="title"/></title>
</head>
<body>
<div id="head">The Shared header</div>
<div id="content"><c:block name="content">the default content...</c:block></div>
<div id="foot">The Shared footer</div>
</body>
</html>