Top

08:JSTL:<c:>核心标签库

JSP jsp JavaWeb jstl  浏览 评论

JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。

JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为 1.2.5 版。JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。

Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性、维护性和方便性。

JSTL 1.2.5 必须在支持 Servlet 2.5, JavaServer Pages 2.1 以上版本的JavaWeb容器才可使用。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

=========================================================================

1、在 WEB-INF/lib 下加入如下jar包:

taglibs-standard-compat-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar

 

2、在jsp文件的顶部加入以下内容:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

==========================================================================

一、<c:> 核心标签库 

==========================================================================

JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect

 


1、<c:forEach> 标签:

为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。

   格式:

    <!-- 语法1:迭代一集合对象之所有成员 -->

    <c:forEach [var="varName"items="collection" [varStatus="varStatusName"[begin="begin"] [end="end"] [step="step"]>

        <!-- 本体内容 -->

    </c:forEach>

    <!-- 语法2:迭代指定的次数 -->

    <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>

        <!-- 本体内容 -->

    </c:forEach>

   属性

名称 说明EL类型必须默认值
var用来存放现在指到的成员NString
items被迭代的集合对象Y

Arrays

Collection

Iterator

Enumeration

Map

String

varStatus用来存放现在指到的相关成员信息NString
begin开始的位置Yint0
end结束的位置Yint最后一个成员
step每次迭代的间隔数Yint1

<c:forEach> 标签的 属性 : varStatus属性: 它的提供另外四个属性:index,count,fist和last,它们个自的意义如下:

Java代码  

  1. 属性                   类型                                  意义  

  2. index                  number                    现在指到成员的索引  

  3. count                  number                    总共指到成员的总和  

  4. first                  boolean                   现在指到成员是否为第一个  

  5. last                   boolean                   现在指到成员是否为最后一个   

示例:

 <c:forEach> 遍历 List列表:对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。

  1. <c:forEach items="${domainList }" var="item">

  2.     <tr>

  3.        <td align="center" valign="middle">${item["domain"]==null?"&nbsp;":item["domain"]}</td>

  4.        <td align="center" valign="middle">

  5.            <fmt:formatDate value="${item['bind_date']}" pattern="yyyy-MM-dd HH:mm:ss" />

  6.        </td>

  7.        <td align="center" valign="middle">

  8.            <c:if test="${item['domain']!=null}">

  9.               <href="javascript:;" id="${item['domain']}" class="del">&nbsp;</a>

  10.            </c:if>

  11.        </td>

  12.     </tr>

  13. </c:forEach>

 <c:forEach> 遍历Map:对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。

  1. <c:if test="${!empty permissionMap}">

  2.     <c:forEach items="${permissionMap}" var="item">

  3.        <tr>

  4.            <td>${item.value.id}</td>

  5.            <td>${item.value.urlOnClass}</td>

  6.            <td>${item.value.urlOnMethod}</td>

  7.        </tr>

  8.     </c:forEach>

  9. </c:if> 



2、<c:forTokens> 标签:

用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。

 <c:forTokens> 标签的语法 说明 

<c:forTokens items="strOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>

    <!-- 本体内容 -->

</c:forTokens>

<c:forTokens> 标签的 属性说明 

名称说明EL类型必须默认值
var用来存放现在指到的成员NString
items被迭代的字符串YString
delims定义用来分割字符串的字符NString
varStatus用来存放现在指到的相关成员信息NString
begin开始的位置Yint0
end结束的位置Yint最后一个
step每次迭代的间隔数Yint1



3、<c:out> 标签:

主要用来显示数据的内容

<c:out> 标签的语法 说明 

<!-- 语法1:没有本体(body)内容 -->

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] /> 

<!-- 语法2:有本体内容 -->

<c:out value="value" [escapeXml="{true|false}"]> 

    default value 

</c:out> 

一般来说,<c:out>默认会将<、>、’、” 和 & 转换为 &lt;、&gt;、&#039;、&#034; 和&amp;。假若不想转换时,只需要设定<c:out>的escapeXml属性为fasle就可以了。




4、<c:set> 标签:

主要用来将变量储存至JSP范围中或是JavaBean的属性中。

 <c:set> 标签的语法 说明 

<!-- 语法1:将value的值储存至范围为scope的 varName 变量之中 -->

<c:set value="value" var="varName" [scope="{page|request|session|application }"]/> 

<!-- 语法2:将本体内容的数据储存至范围为scope的 varName 变量之中 -->

<c:set var="varName" [scope="{ page|request|session|application}"]> 

    本体内容 

</c:set> 

<!-- 语法3:将 value的值储存至 target 对象的属性中 -->

<c:set value="value" target="target" property="propertyName" /> 

<!-- 语法4:将本体内容的数据储存至target 对象的属性中 -->

<c:set target="target" property="propertyName"> 

    本体内容 

</c:set> 

<c:set> 标签的 属性说明 

名称说明EL类型必须默认值
value要被储存的值YObject
var准备存入的变量名称NString
scopevar变量的JSP范围NStringpage
target为一JavaBean或java.util.Map对象YObject
property指定target对象的属性YString



5、<c:remove> 标签:

主要用来移除变量。

  <c:remove> 标签的语法 说明  

  1. <c:remove var="varName" [scope="{ age|request|session|application }"] />



6、<c:catch> 标签:

主要用来处理产生错误的异常状况,并且将错误信息储存起来。

  <c:catch> 标签的语法 说明 

Html代码  

  1. <c:catch [var="varName"] >  

  2. … 欲抓取错误的部分  

  3. </c:catch>  



7、<c:if> 标签:

用途就和我们一般在程序中用的if一样。

  <c:if> 标签的语法 说明 

    <!-- 语法1:没有本体内容(body) -->

    <c:if test="testCondition" var="varName" [scope="{page|request|session|application}" ]/>

    <!-- 语法2:有本体内容 -->

    <c:if test="testCondition" [var="varName" ] [scope="{page|request|session|application}"]>

       <!-- 本体内容 -->

    </c:if>

    示例:

    <c:if test="${not empty item.publish_time}">

       <!-- 内容 -->

    </c:if>

    <c:if test="${item['domain']!=null}">

       <!-- 内容 -->

    </c:if>

    <c:if test="${!empty permissionMap}">

       <!-- 内容 -->

    </c:if>



8、<c:choose> <c:when> <c:otherwise>标签:

 <c:choose when otherwise> 标签的语法 说明 

    <c:set var="score">85</c:set>

    <c:choose>

       <c:when test="${score>=90}">

           <!-- 你的成绩为优秀!  -->

       </c:when>

       <c:when test="${score>=70&&score<90}">

           <!-- 您的成绩为良好!  -->

       </c:when>

       <c:when test="${score>60&&score<70}">

           <!-- 您的成绩为及格  -->

       </c:when>

       <c:otherwise>

           <!-- 对不起,您没有通过考试!-->

       </c:otherwise>

    </c:choose>



9、<c:import> 标签:

<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。

举例来说,使用<c:import>标签可以包含一个FTP服务器中不同的网页内容。

格式:

<c:import url="string" 

          var="string" 

          scope="string" 

          varReader="string" 

          context="string" 

          charEncoding="string" />

属性:

属性

描述

是否必要

默认值

url

待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源

context

当使用相对路径访问外部context资源时,context指定了这个资源的名字。

当前应用程序

charEncoding

所引入的数据的字符编码集

ISO-8859-1

var

用于存储所引入的文本的变量

scope

var属性的作用域

page

varReader

可选的用于提供java.io.Reader对象的变量

示例:

<c:import url="file:///D:/Temp/test1.json" charEncoding="utf-8"></c:import>

<c:import url="temp.jsp"></c:import>

<c:import url="http://www.mchweb.net"></c:import>



10、<c:redirect> 标签:

<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。

格式:

<c:redirect url="<string>" context="<string>"/>

属性:

属性

描述

是否必要

默认值

url

目标URL

context

紧接着一个本地网络应用程序的名称

当前应用程序

示例:

<c:redirect url="http://www.mchweb.net"></c:redirect>



11、<c:url> 标签:

<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

这个标签在需要的时候会自动重写URL。

var属性用于存储格式化后的URL。

<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。

格式:

<c:url var="<string>"

       scope="<string>"

       value="<string>"

       context="<string>"/>

属性:

属性

描述

是否必要

默认值

value

基础URL

context

本地网络应用程序的名称

当前应用程序

var

代表URL的变量名

Print to page

scope

var属性的作用域

Page

示例:

<c:url value="/temp.jsp"></c:url>