jstl之c標籤、Function函式庫
JSTL組成:
JSTL –Core 核心標籤庫。 - 這是本部分的重點
JSTL – I18N - 國際化標籤庫。Internationalization- I18N
JSTL - Functions – 函式庫。
JSTL – SQL – 資料庫操作標籤(有悖於MVC設計模式不用不講)。
JSTL - XML ,對XML的操作(同SQL標籤)。
JSTL一般必須配合EL表示式使用才能發揮其功能之強大
如果你的Web專案是基於JavaEE2.5或以上的。可以在你專案的任意頁面上通過<%@ taglib 指令使用JSTL的核心標籤庫。
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
uri是引用標籤庫的資源定位符,並不代表一個實際的地址。
Prefix是自定義的字首。
JSTL-Core一共包含以下幾個子標籤:
標籤的具體使用說明可以用Java反編譯軟體JD-GUI開啟tomcat/webapps下的對應專案下的WEB-INF/LIB/jstl-impl.jar/META-INF找到對應的標籤開啟即可。
具體使用程式碼示例如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jstl演示</title>
</head>
<body>
<!-- 1、演示c:out的用法 -->
<%
pageContext.setAttribute("RED", "<font color='red'>你好</font>");
%>
<c:out value="${RED }" />
<%--結果為:<font color='red'>你好</font>,escapeXml預設為true,即預設輸出為原樣格式 --%>
<br/>
<c:out value="${RED }" escapeXml="false" />
<%--結果為:紅色的“你好” --%>
<br/>
<c:out value="${GREEN }" escapeXml="false" default="找不到"/>
<%--結果為:找不到 ”/>從page到application開始查詢,如果沒有找到,就顯示預設值“找不到” --%>
<br/>
<!-- 2、演示c:set的用法 -->
<c:set var="name" value="Jack" />
${name }
<%--結果為:Jack --%>
<br/>
<jsp:useBean id="user" class="cn.hncu.domain.User"/>
<c:set target="${user }" property="name" value="Tom"/>
<c:set target="${user }" property="age" value="24"/>
${user.name } ${user.age }
<%--結果為:Tom 24 --%>
<br/>
<jsp:useBean id="map" class="java.util.HashMap" scope="request"/>
<c:set target="${map }" property="name" value="張三" />
<c:set target="${map }" property="sex" value="男" />
${map.name } ${map.sex }
<%--結果為:張三 男 --%>
<br/>
<!-- 3、演示c:if的用法 -->
<c:if test="${map.name=='張三' }" var="boo" scope="request" >
abcdefg
</c:if>
<c:if test="${!boo }">
gfdecba
</c:if>
<%--結果為:abcdefg,注意此處因為有包含關係,c:if不能用自封閉--%>
<br/>
<!-- 4、演示c:choose c:when c:otherwise的用法 -->
<c:set var="score" value="95"/>
<c:choose>
<c:when test="${score>90 }">
優秀
</c:when>
<c:when test="${score>80 }">
良好
</c:when>
<c:when test="${score>70 }">
中等
</c:when>
<c:otherwise>
不行
</c:otherwise>
</c:choose>
<%-- 結果為:優秀 此處功能相當於帶break功能的switch-case語句 --%>
<br/>
<!-- 5、演示c:remove -->
<c:set var="aaa" value="abcde" />
<c:remove var="aaa"/>
${aaa }
<%-- 沒有輸出結果,因為移除了aaa屬性 --%>
<br/>
<!-- 5、演示c:import -->
<c:import url="/jsps/aa.jsp"></c:import>
<%-- 此處有兩個細節,url的第一個"/"代表專案根本目錄,功能上此處相當於jsp動態匯入,
兩個頁面共享同一個request --%>
<br/>
<%--
<!-- 6、演示c:redirect -->
<c:redirect url="/jsps/bb.jsp"/>
--%>
<%-- 重定向,相當於response.sendRedirect(...) --%>
<!-- 7、演示c:rforTokens -->
<c:forTokens items="aa,bb,cc,dd" delims="," var="x">
${x },,,
</c:forTokens>
<%-- 結果為:aa,,, bb,,, cc,,, dd,,,,相當於拆分字串 --%>
<br/>
<!-- 8、演示c:forEach -->
<%
String strs[] = {"11","22","33","44","55"};
pageContext.setAttribute("strs", strs);
%>
<c:forEach items="${strs}" var="str">
${str }-
</c:forEach>
<%-- 結果為:11-22-33-44-55,功能相當於增強for迴圈 --%>
<c:forEach begin="20" end="40" step="2" var="i" varStatus="x">
${i },${x.index },${x.count }<br/>
</c:forEach>
<%-- 功能相當於普通for迴圈 --%>
</body>
</html>
jstl的Function函式呼叫方式:
用之前現在頁面首部匯入標籤<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
引用:${fn:函式名(引數)}
function標籤庫函式使用:
1:${fn:contains(name, searchString)} name變數的字串值是否包含searchString子串,返回boolean值
2:${fn:containsIgnoreCase(name, searchString)} 與1相同+忽視大小寫
3:${fn:endsWith(filename, “.txt”)} 判斷filename是否以.txt子串結束 ,返回boolean值
4:${fn:escapeXml(param:info)} Escapes characters that could be interpreted as XML markup.返回string值
5:
7:${fn:length(shoppingCart.products)} shoppingCart.products變數的長度,返回int值
8:${fn:replace(text, “-“, “•”)} 將text中的-字串用•字串代替,返回行的字串String值
9:${fn:split(customerNames, “;”)} 將customerNames用;分割,返回字串陣列
10:${fn:startsWith(product.id, “100-“)} 判斷product.id是否以100-子串開頭 ,返回boolean值
11:${fn:substring(zip, 6, -1)} 擷取zip的子串,從下標為6 到length-1(不包含)的子串,返回子串String值
12:${fn:substringAfter(zip, “-“)} 將zip中 從 第一次出現-字串的下標 到最後 擷取成子串,返回子串String值
13:${fn:substringBefore(zip, “-“)} 將zip中 從下標0 到 第一次出現-字串的下標 (不包含) 擷取成子串,返回子串String值
14:${fn.toLowerCase(product.name)} 將product.name全部字母轉換成小寫,返回新的String值
15:${fn.UpperCase(product.name)} 將product.name全部字母轉換成大寫,返回新的String值
16:${fn.trim(name)} name前後空格去掉,返回新的String值