JSTL核心库常用标签
JSP标准标签库 —— JSTL
JSTL标签库一部分是Tag Library(标签库),另一部分是表达式语言.标签库使用XML语法来定义所以标签.主要分为5种标签.
5种标签分别指定了5个URI,并对标签库的前缀作出约定.
????Core核心标签库chttp://java.sun.com/jsp/jstl/core<c:out>I18N本地化处理标签库fmthttp://java.sun.com/jsp/jstl/xml<fmt:formatDate>SQL数据库处理标签库sqlhttp://java.sun.com/jsp/jstl/sql<sql:query>XML处理标签库xml?http://java.sun.com/jsp/jstl/fmt<x:forBach>EL功能函数标签库fnhttp://java.sun.com/jsp/jstl/functions<fn:split>?
?
?
?
Core标签库
Core标签库主要包括了一般用途的标签,条件标签,迭代标签和URL相关标签.
在JSP页面中使用Core标签,要使用taglib指令,指定引用标签库.
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
?
?
一、 一般用途标签
<c:out>
用于计算一个表达式并将结果输出到当前的JspWriter对象.其功能类似于<%=expression%>或${el-expression}.
(1) 语法
语法1:没有标签体
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />?
语法2:有标签体
<c:out value="value" [escapeXml="{true|false}"]> default value</c:out>?
?
(2) 属性
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
?
?
语法2: 将body content储存至varName变量中,设置其范围为scope.
<c:set var="varName" [scope="{ page|request|session|application }"]> body content</c:set>?
?
语法3:将value存储至target对象的property属性.
<c:set value="value" target="target" property="propertyName" />
?
?
语法4: 将body content存储至target对象的property属性.
<c:set target="target" property="propertyName"> body content</c:set>
?
?
(2) 属性
<c:remove var="varName" [scope="{ page|request|session|application }"] />
?
?
(2) 属性
将number变量从Session范围中移除.若我们不设定scope,则<c:remove>将会从Page,Request,Session及Application中顺序寻找是否存在名称为number的数据,若能找到时,则将它移除掉,反之则不会做任何的事情.
?
?
?
<c:catch>
<c:catch>用于捕获在其中嵌套的操作所抛出的异常对象(java.util.Throwable对象),并将异常信息储存到变量中.
?
(1) 语法
<c:catch [var="varName"] > nested actions</c:catch>
?
?
(2) 属性
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
?
语法2:有标签体
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]> body content</c:if>?
?
(2) 属性
<c:choose> body content ( <when> and <otherwise> subtags)</c:choose>
?
?
(2) 属性
无
?
(3) 约束
<c:choose>本身只是 <c:when> 和 <c:otherwise> 的父标签.
<c:choose>的body content只能有:
? ? ? ? 空白
? ? ? ? 1或多个 <c:when>
? ? ? ? 0或多个 <c:otherwise>
?
?
?
<c:when>
<c:when> 是<c:choose>的子标签,表示一个可选的条件.
?
(1)?语法
<c:when test="testCondition" > body content</c:when>
?
?
(2)?属性
<c:otherwise> body content</c:otherwise>
?
?
(2)?属性
无
?
(3)?约束
<c:otherwise> 必须在 <c:choose> 和 </c:choose>之间
在同一个 <c:choose> 中,<c:otherwise> 必须是最后的标签
?
(4)?说明
在运行时,如果所有 <c:when> 的test属性都不为true,则执行<c:otherwise> 的body content。
?
?
?
?
三、 迭代标签
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>.
?
?
<c:forEach>
<c:forEach> 用于遍历集合中的成员.重复执行<c:forEach>的body content.
?
(1) 语法
语法1:遍历循环多个对象的集合
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content</c:forEach>
?
?
?
语法2:循环固定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> body content</c:forEach>
?
?
(2) 属性
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content</c:forTokens>
?
?
(2) 属性
<c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]> optional body content for <c:param> subtags</c:import>
?
?
语法2:资源的内容作为Reader对象被导出.
<c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"]> body content where varReader is consumed by another action</c:import>
?
?
(2) 属性
<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] />
?
?
语法2:body content代表查询字符串(Query String)参数
<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] > <c:param>subtags</c:url>?
?
(2) 属性
<c:redirect url="url" [context="context"] />
?
语法2:body content代表查询字符串参数
<c:redirect url="url" [context="context"] > <c:param> subtags</c:redirect >
?
?
(2) 属性
<c:redirect url="http://www.javaworld.com.tw" />
?
那么网页将会自动导向到http://www.javaworld.com.tw。另外,我们也可以加上context这个属性,用来导向至其他 web站台上的文件,例如:导向到/others下的/jsp/index.html时,写法如下:
<c:redirect url="/jsp/index.html" context="/others" />
?
<c:redirect> 的功能不止可以导向网页,同样它还可以传递参数给目标文件。在这里我们同样使用<c:param>来设定参数名称和内容。
?
?
?
?
<c:param>
<c:param>为一个URL添加请求参数.
?
(1) 语法
语法1:在属性value中指定参数值
<c:param name="name" value="value">
?
?
语法2:标签体中指定参数值
<c:param name="name"> paramter value</c:param>
?
?
(2) 属性
无
?
(3) Null和错误处理
如果name是null或空,那么<c:param>标签什么都不做.
如果value是null,那么将作为空值处理.
?
(4) 说明
<c:param>作为<c:import>,<c:url>,<c:redirect>的嵌套标签使用,为URL添加请求参数,并对参数中的特殊字符进行正确处理的编码.例如空格将被编码为"+".
?