Skip to content
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 指定包含的目标文件

css3 选择器 选择片段包含

实例:

    <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>