jstl标签介绍

JSTL包括四个标签库,即Core标签库、XML标签库、国际化与格式化标签库和SQL标签库,这里介绍SQL标签库


<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

jstl表达式常用标签

在web应用开发中,为了使视图与数据逻辑分离,需要使用标签,jstl就是其中之一。一、用法配置

JSTL的版本和servlet规范的版本不同时,配置方式是不同的,以下以servlet2.4和jstl1.1为例。

核心标签c:1、web.xml中的配置如下(其实ide已经帮你配置好了)<web-app version="2.4"
xmlns=" http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></web-app>2、在jsp页面导入声明<%@ taglib prefix="c" uri= http://java.sun.com/jsp/jstl/core%>二、常用标签1、<c:out/>用于输出内容例子:<c:out value="abc"/><c:out value="${va}" ></c:out>2、<c:set></c:set>用于设置作用域变量例子:<c:set value="Hello" var="sessionVar" scope="session"></c:set>3、<c:remove />用于清除作用域变量<c:remove var="maxUser" scope="application"/>4、<c:forEach/>用于循环输出变量属性:vars:循环体中可以引用的变量;begin:循环开始的下标;end:循环结束的下标;items:集合的名称;例如:<c:forEach begin="0" end="5" items="array" var="s" />${s}<br></c:forEach>将输出array集合中的6个元素,array是作用域变量,可以是request,session,application作用域内属性变量(调用setAttribute方法设置的)。如果array中存放的是对象如User(包含name,id属性),如果想输出name属性的话可以用${s.name},其等价于调用s.getName()方法。5、<c:if/>用于执行条件判断例如:<c:if test="${empty sessionScope.name }">
<c:redirect url="testJSTLlogin.jsp" />
</c:if>个人觉得此功能不够强大,还是脚本灵活6、<c:choose><c:when></c:when>......<c:other></c:other>用于执行条件判断相当于if,else if,else if... else用法:c:choose标签用来选择执行语句
当c:when的test中判断结果为true时执行该标签中的内容;
如果所有c:when的test中判断结果都为false,则执行c:otherwise中的内容;例子:

<c:choose>
<c:whentest="testCondition">
Content1
</c:when>
<c:whentest="testCondition">
Content2
</c:when>
<c:otherwise>
Content3
</c:otherwise>
</c:choose>

一.连接MySQL的几种方式


1.创建普通的数据源


<sql:setDataSource var="example" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/test"
user="root" password="" [scope="request"]/>


2.从JNDI名称空间中获得一个数据源


<sql:setDataSource var="example" dataSource="jdbc/bn" />


二.<sql:query>和<sql:update>(<sql:param>/<sql:dateParam>可以用于query和update)


<sql:query var="qurey" dataSource="${example}" sql="select * from dept />


<sql:query var="qurey2" dataSource="${example}">


select * from dept


</sql:query>


<sql:query var="qurey3" dataSource="${example}" [maxRows="20"] [startRow="1"]


[scope="request"]>


select * from dept where deptid=? and deptname=? and createtime=?


<sql:param value="1"/>


<sql:param>wuhui</sql:param>


<sql:dateParam>new Date()</sql:dateParam>


</sql:query>


<c:forEach var="row" items="${query.rows}"></c:forEach>//迭代


<sql:update var="update" dataSource="${example}" >


update dept set deptid=? and deptname=?


<sql:param value="1"/>


<sql:param>wuhui</sql:param>


update 处理增删改什么都可以,除了查询


</sql:update>


query和update语法基本一样


3.<sql:transaction>事务处理标签


<sql:transaction dataSource="example"


[isolation="read_committed|read_uncommitted|repeatable_read|serializable"]>


<sql:query>and<sql:update>语句


</sql:transaction>

jstl查询SQL Server 2000数据库实例

本示例从sql2000的pubs数据库中的employee表取出first name、lname.

<%@ page contentType="text/html; charset=GB2312"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>jstl连接SQL Server 2000数据库</title>
</head>
<body>
<h3>本示例从sql2000的pubs数据库中的employee表取出first name、lname</h3>
当然,运行本JSP页须机器已经安装了SQL Server 2000数据库<br>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs" user="sa" password="pass"/>
<sql:query var="rs">
select * from employee
</sql:query>
<table border="1">
<tr align="center">
<td><strong>
first name</strong>
</td>
<td><strong>
last name
</strong></td>
</tr>
<c:forEach items="${rs.rows}" var="row">
<tr>
<td>
<c:out value="${row.fname}"></c:out>
</td>
<td>
<c:out value="${row.lname}"></c:out>
</td>
</tr>
</c:forEach>
</table>
<hr>
</body>
</html>

结果:

本示例从sql2000的pubs数据库中的employee表取出first name、lname

当然,运行本JSP页须机器已经安装了SQL Server 2000数据库

first namelast namePaoloAccortiPedroAfonsoVictoriaAshworthHelenBennettLesleyBrownFranciscoChangPhilipCramerAriaCruzAnnDevonAnabelaDominguesPeterFrankenPaulHenriotCarlosHernadezPalleIbsenKarlaJablonskiKarinJosephsMattiKarttunenPirkkoKoskitaloJanineLabruneMariaLarssonYoshiLatimerLaurenceLebihanElizabethLincolnPatriciaMcKennaRolandMendelRitaMullerHelvetiusNagyTimothyO'RourkeSvenOttliebMiguelPaolinoPaulaParenteManuelPereiraMariaPontesMartineRanceDiegoRoelAnnetteRouletMarySaveleyCarineSchmittMargaretSmithHowardSnyderMartinSommerGaryThomasDanielTonini

一个日期输入的JSTL例子

日期输入页面:

dateInput.jsp

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>

<title>Currency Formatting</title>
</head>
<body>


<form method="post" action="doDateInput.jsp">
Please enter your birthday:
<select name="month">
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>

<select name="day">
<c:forEach begin="1" end="31" var="day">
<option><c:out value="${day}"/></option>
</c:forEach>
</select>
<select name="year">
<c:forEach begin="1930" end="2003" var="year">
<option><c:out value="${year}"/></option>
</c:forEach>
</select>
<input type="submit" value="Submit" />
</form>



</body>
</html>

日期处理页面:

doDateInput.jsp

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>

<title>Currency Formatting</title>
</head>
<body>


<fmt:parseDate
var="date"
parseLocale="zh_CN"
value="${param.year}-${param.month}-${param.day}">

</fmt:parseDate>

<fmt:formatDate value="${date}" dateStyle="full"/>



</body>
</html>

提交后,显示结果诸如1930年11月1日 星期六

如果日期输入是en_US格式,也就是做以下改动

<select name="month">
<option value="Jan">January</option>
<option value="Feb">February</option>
<option value="Mar">March</option>
<option value="Apr">April</option>
<option value="May">May</option>
<option value="Jun">June</option>
<option value="Jul">July</option>
<option value="Aug">August</option>
<option value="Sep">September</option>
<option value="Oct">October</option>
<option value="Nov">November</option>
<option value="Dec">December</option>
</select>

则日期处理页面也要做想应改动

<fmt:parseDate
var="date"
parseLocale="en_US"
value="${param.month} ${param.day}, ${param.year}">

注意逗号后有一个空格,因为英文的日期格式为"May 25, 1997"
</fmt:parseDate>

JSTL学习笔记

<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x"%>


URL相关的标签

<c:import>
语法1:资源的内容使用String对象向外暴露
<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>
例1:
<h3>绝对路径 URL</h3>
<blockquote>
<ex:escapeHtml>
<c:import url="http://127.0.0.1:8080/ch15/beimport.jsp"/>
</ex:escapeHtml>
</blockquote>
<h3>相对路径 URL</h3>
<blockquote>
<ex:escapeHtml>
<c:import url="beimport.jsp"/>
</ex:escapeHtml>
</blockquote>
<h3>encode:</h3>
<a href=<c:url value="beimport.jsp"><c:param name="userName" value="hellking"/></c:url>>--></a>
相当于<--jsp:include file=""/>
<c:import var="myurl" url="http://127.0.0.1:8080/ch15/beimport.jsp"/>

<c:out value="${myurl}"/>

<c:import var="myurl2" url="beimport.jsp"/>
<c:out value="${myurl2}"/>
</pre>
</blockquote>
<h3>传递参数到指定的URL</h3>
<blockquote>
<c:import url="beimport.jsp" charEncoding="gb2312">
<c:param name="userName" value="hellking"/>
</c:import>


<c:redirect>
把客户的请求重定向到另一个资源
语法1:没有BODY时.
<c:redirect url="value" [context="context"]/>
例1:
<c:url value="beimport.jsp" var="test"><c:param name="userName" value="hellking"/></c:url>
<c:redirect url="${test}"/>
语法2:在BODY中指定查询的参数.
<c:redirect url="value" [context="context"]/>
<c:param>subtags
</c:redirect>
例1:
<c:redirect url="beimport.jsp">
<c:param name="userName" value="hellking"/>
</c:redirect>

<c:url>
用于构造URL,主要的用途是URL重写.
语法1:No Body.
<c:url value="value" [context="context"]
[var="varName"][scope="{page|request|session|application}"]/>
例1:
<c:url value="beimport.jsp"/>
语法2:Body.
<c:url value="value" [context="context"]
[var="varName"][scope="{page|request|session|application}"]>
<c:param>subtags
</c:url>
例2:
<c:url var="myurl" value="beimport.jsp" scope="session">
<c:param name="userName" value="hellking"/>
</c:url>
<c:out value="${myurl}"/>

<c:param>
在<c:import>.<c:url>.<c:redirect>中添加请求的参数.
语法1:参数的值使用value属性指定.
<c:param name="name" value="value"/>

语法2:参数的值在标签的BODY中指定.
<c:param name="name">
parameter value
</c:param>

迭代标签
<c:forEach>
在一个包括一系列对象的Collection中迭代计算它的BodyContent,或者重复迭代固定的次数.
语法1:在Collection中迭代.
<c:forEach [var="varName"] items="collection"
[varStatus="varStatusName"] //这是迭代状态
[begin="begin"][end="end"][step="step"]>
body content
</c:forEach>
例1:迭代Collection
<table border=1>
<c:forEach var="users" items="${users}">
<tr>
<td><c:out value="${users.userName}"/></td>
<td><c:out value="${users.password}"/></td>
<td><c:out value="${users.age}"/></td>
</tr>
</c:forEach>
</table>
例2:other迭代
<%
int[] myIntArray=new int[]{1,2,3,4,5,65,34};
String[] myStringArray=new String[]{"I ","am ","a ","Java","fans"};
Vector v=new Vector();
v.add("this");
v.add("is");
v.add("myEnumeration");
v.add("!");
Enumeration myEnumeration=v.elements();
HashMap myNumberMap=new HashMap();
myNumberMap.put("hellking","23");
myNumberMap.put("guest","23");
myNumberMap.put("guest2","223");
myNumberMap.put("guest3","232");
request.setAttribute("myIntArray",myIntArray);
request.setAttribute("myStringArray",myStringArray);
request.setAttribute("myEnumeration",myEnumeration);
request.setAttribute("myNumberMap",myNumberMap);
%>
<h4>Array of primitives (int)</h4>
<c:forEach var="i" items="${myIntArray}">
<c:out value="${i}"/> ?
</c:forEach>
<h4>Array of objects (String)</h4>
<c:forEach var="string" items="${myStringArray}">
<c:out value="${string}"/><br>
</c:forEach>
<h4>myEnumeration (warning: this only works until myEnumeration is exhausted!)</h4>
<c:forEach var="item" items="${myEnumeration}" begin="0" end="5" step="1">
<c:out value="${item}"/><br>
</c:forEach>
<h4>Properties (Map)</h4>
<c:forEach var="prop" items="${myNumberMap}" begin="1" end="5">
<c:out value="${prop.key}"/> = <c:out value="${prop.value}"/><br>
</c:forEach>
<h4>String (Common Separated Values)</h4>
<c:forEach var="token" items="red,blue,green">
<c:out value="${token}"/><br>
</c:forEach>


语法2:迭代固定的次数.
<c:forEach [var="varName"]
[varStatus="varStatusName"]
begin="begin" end="end"[step="step"]>
body content
</c:forEach>
例1:
<c:forEach var="i" begin="1" end="10">
<c:out value="${i}"/> -->
</c:forEach>

例2:<h4>第二种迭代:1 to 10,step=3</h4>
<c:forEach var="i" begin="1" end="10" step="3">
<c:out value="${i}"/> -->
</c:forEach>

例3:迭代状态
<td><c:out value="${status.index}"/></td>
<td><c:out value="${status.count}"/></td>
<td><c:if test="${status.first}">
<b></c:if>
<c:out value="${status.first}"/></b></td>
<td><c:if test="${status.last}">
<i> </c:if>
<c:out value="${status.last}"/></i></td>
</tr>

<c:forTokens>
用于处理TokenString的迭代,可以指定一个或者多个分隔符.
语法:
<c:forTokens items="stringOfTokens" delims="delimiters"
[var="varName"]
[varStatus="varStatusName"]
[begin="begin"][end="end"][step="step"]
body content
</c:forTokens>
例:
<h4>使用 '|' 作为分割符</h4>
<c:forTokens var="token" items="blue,red,green|yellow|pink,black|white"
delims="|">
<c:out value="${token}"/> &copy;
</c:forTokens>
<h4>使用 '|'和',' 作为分割符</h4>
<c:forTokens var="token" items="blue,red,green|yellow|pink,black|white"
delims="|,">
<c:out value="${token}"/> &copy;
</c:forTokens>
<h4>使用 '-' 作为分割符</h4>
<c:forTokens var="token" items="blue--red--green--yellow--pink--black--white"
delims="--">
<c:out value="${token}"/> &copy;
</c:forTokens>


一般用途

输出
<c:out value="&{XXX}" default="这个值不存在">
设置一个变量
<c:set>
例:设置一个javaBean的属性<c:set value="hk2" target="${user}" property="userName"/>

删除某个变量或者属性
<c:remove var="${XXX}" [scope="{page|request|...}"]>

捕获由嵌套在它里面的标签抛出的异常
<c:catch [var="varName"]>
nested actions
</c:catch>


条件标签
<c:if>
语法1:无Body的情况
<c:if test="testCondition"
var="varName" [scope="{page|request|session|application}"]/>
例:
<c:if test="${user.age<18}">
对不起,你还的年龄过小,不能范围这个网页◎!
</c:if>
语法2:有Body的情况
<c:if test="testCondition"
var="varName" [scope="{page|request|session|application}"]>
body content
</c:if>


<c:choose> <c:when> <c:otherwise>
例:
<c:choose>
<c:when test="${user.age <=18}">
<font color="blue">
</c:when>
<c:when test="${user.age<=30&&user.age>18}">
<font color="red">
</c:when>
<c:otherwise>
<font color="green">
</c:otherwise>
</c:choose>
你的年龄是:<c:out value="${user.age}"/>

注意,它的Body内容只能由以下的元素构成:
空格.
0个或者多个<when>子标签,<when>必须在<otherwise>标签之前出现.
0个或者多个<otherwise>子标签.


数据库相关


QUERY标签


语法1 无SQL参数
<sql:query sql="sqlQuery"
var="varName"
[scope="{page|request|session|application}"]
[dataSource="dataSource"]
[maxRows="maxRows"]
[startRow="startRow"]>
SQL
</sql:query>

例1:
<sql:query var="query" dataSource="${example}">
SELECT * FROM contact
</sql:query>

<table border="1">
<c:forEach var="row" items="${qurey.rows}">
<tr>
<td>Name:<c:out value="${row[0]}"/></td>
<td>mobile:<c:out value="{row.mobile}"/></td>
</tr>
</c:forEach>
</table>
<hr>

例2:
<sql:query var="result" dataSource="mbq">
select code, curprice, openprice, highprice, lowprice, balanceprice, reservecount,totalamount,curamount, openamount,

closeamount, reservechange, totalmoney, buyprice1, sellprice1, buyamount1, sellamount1, buyprice2, sellprice2, buyamount2,

sellamount2, buyprice3, sellprice3, buyamount3, sellamount3, buyprice4, sellprice4, buyamount4, sellamount4, buyprice5,

sellprice5, buyamount5, sellamount5, outamount, inamount, time,yesterbalanceprice,closeprice from currentdata WHERE Code <>

'SYS' order by code
</sql:query>代码 现价 开盘 最高 最低 平均 订货量 成交量
<c:forEach var="row" items="${result.rowsByIndex}">${row[0]} ${row[1]} ${row[2]} ${row[3]} ${row[4]}

${row[5]} ${row[6]} ${row[7]}
</c:forEach>

语法2 有query参数
<sql:query sql="sqlQuery"
var="varName"
[scope="{page|request|session|application}"]
[dataSource="dataSource"]
[maxRows="maxRows"]
[startRow="startRow"]>
[<sql:param>""]
</sql:query>
例1:变量传入
<c:set var="aa">
GX0511A
</c:set>
<sql:query var="result" dataSource="mbq" sql="select * from currentdata WHERE code=? order by code">
<sql:param>
${aa}
</sql:param>
</sql:query>代码 现价 开盘 最高 最低 平均 订货量 成交量
<table border="1">
<c:forEach var="row" items="${result.rowsByIndex}">
<tr>
<td>Name: ${row[0]} </td><td>2:${row[1]}</td> <td>3:$10:02 2005-11-17{row[2]}</td>
</tr>
<tr>
<td>${row[3]}</td><td> ${row[4]}</td><td>${row[5]}</td><td>${row[6]}</td><td>${row[7]}</td>
</tr>
</c:forEach>
</table>

语法3 有query,且query在body中.
<sql:query var="varName"
[scope="{page|request|session|application}"]
[dataSource="dataSource"]
[maxRows="maxRows"]
[startRow="startRow"]>
query
[<sql:param>""]
</sql:query>
例1:值传入
<sql:query var="result" dataSource="mbq">
select * from currentdata WHERE code=? order by code
<sql:param value="GX0511A"/>
</sql:query>代码 现价 开盘 最高 最低 平均 订货量 成交量
<table border="1">
<c:forEach var="row" items="${result.rowsByIndex}">
<tr>
<td>Name: ${row[0]} </td><td>2:${row[1]}</td> <td>3:$10:02 2005-11-17{row[2]}</td>
</tr>
<tr>
<td>${row[3]}</td><td> ${row[4]}</td><td>${row[5]}</td><td>${row[6]}</td><td>${row[7]}</td>
</tr>
</c:forEach>
</table>


UPDATA标签

语法1
<sql:update sql="sqlUpdate"
[dataSource="dataSource"]
[var="varName"][scope="{page|request|session|application}"]/>
例1
<sql:update var="update2" sql="insert into users values('测试','9999',1,'test')"
dataSource="jdbc/quickdb2">

</sql:update>

语法2
<sql:update sql="sqlUpdate"
[dataSource="dataSource"]
[var="varName"][scope="{page|request|session|application}"]>
<sql:param>actions
</sql:update>
例1
<sql:update var="update2" sql="delete from users where username=?" dataSource="jdbc/quickdb2">
<sql:param value="测试"/>
</sql:update>

语法3
<sql:update [dataSource="dataSource"]
[var="varName"][scope="{page|request|session|application}"]>
update statement
optional<sql:param>actions
</sql:update>
例1
<c:set var="aa" value="测试"/>

<sql:update var="update2" dataSource="jdbc/quickdb2">
delete from users where username=?
<sql:param>
${aa}
</sql:param>
</sql:update>


TRANSACTION标签
<sql:transaction [dataSource="dataSource"]
[isolation=isolationLevel]>
<sql:query>and<sql:update>statements
</sql:transaction>
isolationLevel::="read_committed"|"read_uncommitted"|"repeatable_read"|"serializable"
注意:嵌套在它里面的<sql:query>和<sql:update>标签不用使用DataSource属性来另外指定数据源.


XML标签
<x:parse>
用于解析XML文档
语法1:解析由String或者Reader对象组成的XML文档.
<x:parse xml="XMLDocument"
{var="var" [scope="scope"]|varDom="var"[scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]/>

语法2:解析在Body中指定的XML文档.
<x:parse
{var="var" [scope="scope"]|varDom="var"[scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]>
XML Document to parse
</x:parse>
例1:
<c:set var="xmlText">
<a>
<b>
<c>
test1
</c>
</b>
<d>
test2
</d>
</a>
</c:set>
<x:parse var="myxml" xml="${xmlText}" />
<x:out select="$myxml/a/b/c"/>
<x:out select="$myxml//d"/>
<x:parse var="bookxml">
<books>
<book id="01">
<name>jsp 应用开发详解</name>
<price>59</price>
</book>
</books>
</x:parse>
<x:out select="$bookxml/books//name"/>


<x:out>
计算XPath表达式,并把结果返回给JspWriter对象进行输出
语法:
<x.out select="XpathExpression" [escapeXml="true|false}"]/>
例1:
<x:parse var="test">
<books>
<book id="01">
<name>jsp 应用开发详解</name>
<price>59</price>
</book>
</books>
</x:parse>
<x:out select="$test/books//name"/><br>
<x:out select="$test//name"/><br>
<x:out select="$test/books/book/name"/><br>
<x:out select="$test/books/book/price"/><br>


<x:set>
计算XPath表达式,并且把结果保存到某个范围的变量中.
语法:
<x:set select="XPathExpression"
var="varName"[scope="{page|request|session|application}"]/>

JSTL core c 标签的使用

<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>

1.c:catch
<c:catch var="abccba">
<%=1/0 %>
</c:catch>
${abccba }
2.c:chose
<c:choose>
<c:when test="true">
${"正确" }
</c:when>
<c:otherwise>
${"错误" }
</c:otherwise>
</c:choose>
3.c:foreach
<c:forEach items="list" var="x" begin="0" end="10" step="2" varState="sate">
<c:out value="${x}"/>
<c:out value="${x * x}"/>
</c:forEach>

其中:state.*** 代表下面的意思:

current getCurrent() 当前这次迭代的(集合中的)项
index getIndex() 当前这次迭代从 0 开始的迭代索引
count getCount() 当前这次迭代从 1 开始的迭代计数
first isFirst() 用来表明当前这轮迭代是否为第一次迭代的标志
last isLast() 用来表明当前这轮迭代是否为最后一次迭代的标志
begin getBegin() begin 属性值
end getEnd() end 属性值
step getStep() step 属性值

4.c:forTokens
同forEach 它主要是用来处理 字符串,之间用逗号或者什么其他符号分割的,

<c:forTokens items="a,a,a,a,a" delims = "," var="x" begin="0" end="10" step="2" varState="sate">

5.c:if

<c:if test="true" var= "var" scope="session">

var 可以定义一个 test 的值,并且用 scope 设置这个变量的生命周期

6.c:out

<c:out value="df" default= "" escapeXml="true">

default ,当 value 出现 null 值时候用的默认值

escapeXml,是否转换 HTML 格式的文字

JSTL function 标签 使用

<taglib>
<taglib-uri>http://java.sun.com/jstl/fn</taglib-uri>
<taglib-location>/WEB-INF/fn.tld</taglib-location>
</taglib>

长度函数: fn:length

字符串处理函数: fn:contains 、 fn:containsIgnoreCase 、 fn:endsWith 、 fn:escapeXml 、 fn:indexOf 、 fn:join 、 fn:replace 、 fn:split 、 fn:startsWith 、 fn:substring 、 fn:substringAfter 、 fn:substringBefore 、 fn:toLowerCase 、 fn:toUpperCase 、 fn:trim

JSP 页面上:

<%@ taglib uri="/WEB-INF/fn.tld" prefix="fn" %>

${fn:toUpperCase("sdjkhjshjhjd") }

这个例子将输出 这些字母的大写字母

一.长度函数 fn:length 函数

长度函数 fn:length 的出现有重要的意义。在 JSTL1.0 中,有一个功能被忽略了,那就是对集合的长度取值。虽然 java.util.Collection 接口定义了 size 方法,但是该方法不是一个标准的 JavaBean 属性方法(没有 get,set 方法),因此,无法通过 EL 表达式“ ${collection.size} ”来轻松取得。

fn:length 函数正是为了解决这个问题而被出来的。它的参数为 input ,将计算通过该属性传入的对象长度。该对象应该为集合类型或 String 类型。其返回结果是一个 int 类型的值。下面看一个示例。

<%ArrayList arrayList1 = new ArrayList();

arrayList1.add("aa");

arrayList1.add("bb");

arrayList1.add("cc");

%>

<%request.getSession().setAttribute("arrayList1", arrayList1);%>

${fn:length(sessionScope.arrayList1)}

假设一个 ArrayList 类型的实例“ arrayList1 ”,并为其添加三个字符串对象,使用 fn:length 函数后就可以取得返回结果为“ 3 ”。

二.判断函数 fn:contains 函数

fn:contains 函数用来判断源字符串是否包含子字符串。它包括 string 和 substring 两个参数,它们都是 String 类型,分布表示源字符串和子字符串。其返回结果为一个 boolean 类型的值。下面看一个示例。

${fn:contains("ABC", "a")}<br>

${fn:contains("ABC", "A")}<br>

前者返回“ false ”,后者返回“ true ”。

三.fn:containsIgnoreCase 函数

fn:containsIgnoreCase 函数与 fn:contains 函数的功能差不多,唯一的区别是 fn:containsIgnoreCase 函数对于子字符串的包含比较将忽略大小写。它与 fn:contains 函数相同,包括 string 和 substring 两个参数,并返回一个 boolean 类型的值。下面看一个示例。

${fn:containsIgnoreCase("ABC", "a")}<br>

${fn:containsIgnoreCase("ABC", "A")}<br>

前者和后者都会返回“ true ”。

四.词头判断函数 fn:startsWith 函数

fn:startsWith 函数用来判断源字符串是否符合一连串的特定词头。它除了包含一个 string 参数外,还包含一个 subffx 参数,表示词头字符串,同样是 String 类型。该函数返回一个 boolean 类型的值。下面看一个示例。

${fn:startsWith ("ABC", "ab")}<br>

${fn:startsWith ("ABC", "AB")}<br>

前者返回“ false ”,后者返回“ true ”。

五.词尾判断函数 fn:endsWith 函数

fn:endsWith 函数用来判断源字符串是否符合一连串的特定词尾。它与 fn:startsWith 函数相同,包括 string 和 subffx 两个参数,并返回一个 boolean 类型的值。下面看一个示例。

${fn:endsWith("ABC", "bc")}<br>

${fn:endsWith("ABC", "BC")}<br>

前者返回“ false ”,后者返回“ true ”。

六.字符实体转换函数fn:escapeXml 函数

fn:escapeXml 函数用于将所有特殊字符转化为字符实体码。它只包含一个 string 参数,返回一个 String 类型的值。

七.字符匹配函数 fn:indexOf 函数

fn:indexOf 函数用于取得子字符串与源字符串匹配的开始位置,若子字符串与源字符串中的内容没有匹配成功将返回“ -1 ”。它包括 string 和 substring 两个参数,返回结果为 int 类型。下面看一个示例。

${fn:indexOf("ABCD","aBC")}<br>

${fn:indexOf("ABCD","BC")}<br>

前者由于没有匹配成功,所以返回 -1 ,后者匹配成功将返回位置的下标,为 1 。

八.分隔符函数 fn:join 函数

fn:join 函数允许为一个字符串数组中的每一个字符串加上分隔符,并连接起来。它的参数、返回结果和描述如表 9.25 所示:

表 9.25   fn:join 函数

参数

描述

array

字符串数组。其类型必须为 String[] 类型

separator

分隔符。其类型必须为 String 类型

返回结果

返回一个 String 类型的值

下面看一个示例。

<% String[] stringArray = {"a","b","c"}; %>

<%request.getSession().setAttribute("stringArray", stringArray);%>

${fn:join(sessionScope.stringArray,";")}<br>

定义数组并放置到 Session 中,然后通过 Session 得到该字符串数组,使用 fn:join 函数并传入分隔符“ ; ”,得到的结果为“ a;b;c ”。

九.替换函数 fn:replace 函数

fn:replace 函数允许为源字符串做替换的工作。它的参数、返回结果和描述如表 9.26 所示:

表 9.26   fn:replace 函数

参数

描述

inputString

源字符串。其类型必须为 String 类型

beforeSubstring

指定被替换字符串。其类型必须为 String 类型

afterSubstring

指定替换字符串。其类型必须为 String 类型

返回结果

返回一个 String 类型的值

下面看一个示例。

${fn:replace("ABC","A","B")}<br>

将“ ABC ”字符串替换为“ BBC ”,在“ ABC ”字符串中用“ B ”替换了“ A ”。

十.分隔符转换数组函数 fn:split 函数

fn:split 函数用于将一组由分隔符分隔的字符串转换成字符串数组。它的参数、返回结果和描述如表 9.27 所示:

表 9.27   fn:split 函数

参数

描述

string

源字符串。其类型必须为 String 类型

delimiters

指定分隔符。其类型必须为 String 类型

返回结果

返回一个 String[] 类型的值

下面看一个示例。

${fn:split("A,B,C",",")}<br>

将“ A,B,C ”字符串转换为数组 {A,B,C} 。

十一.字符串截取函数 fn:substring 函数

fn:substring 函数用于截取字符串。它的参数、返回结果和描述如表 9.28 所示:

表 9.28   fn:substring 函数

参数

描述

string

源字符串。其类型必须为 String 类型

beginIndex

指定起始下标(值从 0 开始)。其类型必须为 int 类型

endIndex

指定结束下标(值从 0 开始)。其类型必须为 int 类型

返回结果

返回一个 String 类型的值

下面看一个示例。

${fn:substring("ABC","1","2")}<br>

截取结果为“ B ”。

十二.起始到定位截取字符串函数 fn:substringBefore 函数

fn:substringBefore 函数允许截取源字符从开始到某个字符串。它的参数和 fn:substringAfter 函数相同,不同的是 substring 表示的是结束字符串。下面看一个示例。

${fn:substringBefore("ABCD","BC")}<br>

截取的结果为“ A ”。

十三.小写转换函数 fn:toLowerCase 函数

fn:toLowerCase 函数允许将源字符串中的字符全部转换成小写字符。它只有一个表示源字符串的参数 string ,函数返回一个 String 类型的值。下面看一个示例。

${fn:toLowerCase("ABCD")}<br>

转换的结果为“ abcd ”。

十四.大写转换函数 fn:toUpperCase 函数

fn:toUpperCase 函数允许将源字符串中的字符全部转换成大写字符。它与 fn:toLowerCase 函数相同,也只有一个 String 参数,并返回一个 String 类型的值。下面看一个示例。

${fn:toUpperCase("abcd")}<br>

转换的结果为“ ABCD ”。

十五.空格删除函数 fn:trim 函数

fn:trim 函数将删除源字符串中结尾部分的“空格”以产生一个新的字符串。它与 fn:toLowerCase 函数相同,只有一个 String 参数,并返回一个 String 类型的值。下面看一个示例。

${fn:trim("AB C ")}D<br>

转换的结果为“ AB CD ”,注意,它将只删除词尾的空格而不是全部,因此“ B ”和“ C ”之间仍然留有一个空格。

JSTL fmt 标签的使用

fmt:formatNumber
fmt:parseNumber
fmt:formatDate
fmt:parseDate

剩下几个 关于 国际标准化的标签的话这里就不做介绍了,有兴趣的朋友可以和我交流一下

fmt:setLocale
fmt:timeZone
fmt:setTimeZone
fmt:bundle
fmt:setBundle
fmt:message
fmt:param

还有一个字符型 标签 fmt:requestEncoding 的话,因为像我一般的话都在 JSP 顶部已经设置过了,个人感觉用处也不是很大

<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />
<fmt:parseDate value="2008-8-8" pattern="yyyy-MM-dd" var = "abccba" scope="session" />

第一个 用来进行 DATE 型数据的格式化输出,字母代表什么意思上面的例子中已经写的很清楚了

第二个 主要是把 Pattern样式的String 类型的数据转换成 Date 类型

<fmt:formatNumber value="123.123456789" pattern="0.00"/>

用来将 数字进行 格式化输出,上面的例子中就是保留两位有效小数

fmt:parseNumber 同 fmt:parseDate 这里就不做介绍了

转载于:http://hi.baidu.com/tag/_taglib/feeds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值