JSTL
详解
(
一
)(转)
先来搭下环境,
jstl
的包当然是不能少的拉。其次,下载必须的标签库或者是
java
的标签库文件。没有的话,也可以联系我
[email protected]
将
jstl 1.1.jar
加到
class
中,(这就不要我详细的讲了吧),然后将标签库放到
WEB-INF
下或则将
java
的标签库文件(
*.jar
)放到
WEB-INF\lib
下,就可以写测试代码了。
first_jstl.jsp
<!---->
<!---->
<c:set var="userName" value="hellking"></c:set>
<c:set var="age" value="16"></c:set>
欢迎您,
<c:out value="${userName}"></c:out>
<c:foreach var="i" begin="1" end="5">
${i}
</c:foreach>
<c:if test="${age&lt;18}">
</c:if>
web.xml
(
对不起,你的年龄过小,不能访问这个网页
◎
!
使用
java
的标签库文件
*.jar)
<!---->
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/fmt-rt
<taglib-location></taglib-location>/WEB-INF/fmt-rt.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/core
<taglib-location></taglib-location>/WEB-INF/c.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/core-rt
<taglib-location></taglib-location>/WEB-INF/c-rt.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/sql
<taglib-location></taglib-location>/WEB-INF/sql.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/sql-rt
<taglib-location></taglib-location>/WEB-INF/sql-rt.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/x
<taglib-location></taglib-location>/WEB-INF/x.tld
<taglib></taglib>
<taglib-uri></taglib-uri>http://java.sun.com/jstl/x-rt
<taglib-location></taglib-location>/WEB-INF/x-rt.tld
1
2
3
4
5
对不起,你的年龄过小,不能访问这个网页
◎
!
JSTL
详解(二)
一般用途的标签
在
JSTL
中,一般用途的标签只要是指具有输出,设置变量,和错误处理等功能的标签,他们在
jsp
中使用很频繁,它们有:
l
<c:out></c:out>
l
<c:set></c:set>
l
<c:remove></c:remove>
l
<c:catch></c:catch>
下面,我来讲述一下他们的作用:
<c:out></c:out>
它是一个输出的标签,负责把计算出的结果输出到
jspwriter
,就跟调用
out.println()
基本一样。没有
BODY
的时候,使用下面的语法:
<c:out value="”value” [escapeXml]=”{true|false}” [default=”defaultValue”]/"></c:out>
有
BODY
的时候,使用下面的语法:
<c:out value="”value” [escapeXml]=”{true|false}”"></c:out>
这里是
BODY
,可以是任何合法的
jsp
或者是
html
代码。
注意,
escapeXml
的作用是是否将代码交给
xml
解析器解释,
true
为交给
xml
解析器解释,
false
为交给浏览器解释,见红色部分代码
举例:
c_out.jsp
<!---->
<!---->
<c:set var="sessionAttr" value="sessionValue" scope="session"></c:set>
<c:set var="pageAttr" value="pageValue" scope="page"></c:set>
<c:set var="requestAttr" value="requestValue" scope="request"></c:set>
<c:out value="</span>&lt;span style=">以下输出的是前面设置的属性</c:out>
" escapeXml="false"/>
<c:out value="${sessionAttr}"></c:out>
<c:out value="${pageAttr}"></c:out>
<c:out value="${requestAttr}"></c:out>
<c:out value="${test_nodef}" default="</span>&lt;span style=">没有</c:out>
test_nodef
这个变量
"/>
<c:set></c:set>
这个标签用于在某个范围
(page,request,session,application)
里面设置特定的值
(
默认为
page)
,或者设置某个已经存在的
javabean
的属性。类似于
<!---->
语法:
1
、使用
value
属性设置一个特定范围里面的属性:
<c:set value="”value” var=”varName”"></c:set>
2
、使用
value
属性设置一个特定范围里面的属性,带有
BODY
:
<c:set value="”value” var=”varName”"></c:set>
Body content
3
、设置某个特定对象的一个属性:
<c:set value="”value” target=”target” property=”propertyName”/"></c:set>
4
、设置某个特定对象的一个属性
,
带有
BODY
:
<c:set value="”value” target=”target” property=”propertyName”"></c:set>
Body content
举例:
c_set.jsp
<!---->
<!---->
<jsp:usebean class="com.j2ee14.ch12.User" id="user"></jsp:usebean>
设置一个属性,然后输出它
<c:set var="maxCount" value="100"></c:set>
<c:out value="${maxCount}"></c:out>
设置属性时,把它的值放在标签的
body
中。
<c:set var="password"></c:set>
ksdjfxsdf234234
<c:out value="${password}"></c:out>
设置
javaBean
的属性,然后输出这些属性值:
<c:set value="hellking" target="${user}" property="userName"></c:set>
userName=<c:out value="${user.userName}"></c:out>
设置属性,并且指定它们的范围,属性的默认范围是
page
。
<c:set var="maxIdelTime" value="20" scope="session"></c:set>
<c:set var="nextPage" value="next.jsp" scope="page"></c:set>
<c:remove></c:remove>
它的作用是删除某个变量或者属性。类似于
<!---->,
它的语法是:
<c:remove var="”varName”"></c:remove>
举例:
c_remove.jsp
<!---->
<!---->
<c:set var="maxUser" value="10000" scope="application"></c:set>
<c:set var="count" value="10" scope="session"></c:set>
maxUser=<c:out value="${maxUser}"></c:out>
count=<c:out value="${count}"></c:out>
调用
c:remove...
<c:remove var="maxUser" scope="application"></c:remove>
<c:remove var="count"></c:remove>
调用了
c:remove
后,参数值为:
maxUser=<c:out value="${maxUser}"></c:out>
,
count=<c:out value="${count}"></c:out>
,
<c:catch></c:catch>
它的作用是捕捉由嵌套在它里面的标签所抛出来的异常。类似于
<!---->
,它的语法是:
<c:catch>nested actions</c:catch>
举例:
c_catch.jsp
<!---->
<!---->
<c:catch var="error"></c:catch>
<!---->
异常:
<c:out value="${error}"></c:out>
异常
exception.getMessage=
<c:out value="${error.message}"></c:out>
异常
exception.getCause=
<c:out value="${error.cause}"></c:out>
JSTL
详解(三)
条件标签包括以下几种:
l
<c:if>;</c:if>
l
<c:choose>;</c:choose>
l
<c:when>;</c:when>
l
<c:otherwise>;</c:otherwise>
下面,我来分别介绍:
l
<c:if>; </c:if>
它用来做条件判断,功能类似
jsp
中的
<!---->
语法:
1
、无
body
的情况
<c:if var="”varName”" test="”testCondition”"></c:if>
2
、有
body
的情况
<c:if var="”varName”" test="”testCondition”"></c:if>
Body
内容
举例:
c_if.jsp
<!---->
<!---->
<c:set var="count" value="100"></c:set>
<c:if test="${count&gt;78}"></c:if>
count>78
l
<c:choose>; </c:choose>
它是用于条件选择,和
<c:when>,<c:otherwise></c:otherwise></c:when>
一起使用,它的条件选择是排斥性的,相当于
jsp
中的
<!---->
,也可以完成
<!---->
的功能
语法:
<c:choose></c:choose>
Body
内容
(
<c:when>,<c:otherwise></c:otherwise></c:when>
)
注意:它的
body
内容只能是由以下的元素组成:
1.
空格;
2.
0
个或多个
<c:when></c:when>
子标签,
<c:when></c:when>
必须在
<c:otherwise></c:otherwise>
子标签之前出现;
3.
0
个或多个
子标签
l
<c:when></c:when>
它是
<c:choose></c:choose>
的一个分支
语法:
<c:when test="”testCondition”"></c:when>
Body
内容
注意:它有两个限制:
1.
必须以
<c:choose></c:choose>
作为它的父标签
2.
必须在
<c:otherwise></c:otherwise>
标签之前出现
l
<c:otherwise></c:otherwise>
他代表了
<c:choose></c:choose>
的最后选择相当于
jsp
的
<!---->
中的
default
语句。
语法:
<c:otherwise></c:otherwise>
Conditional block
它的使用有两个限制:
1.
必须以
<c:choose></c:choose>
作为它的父标签;
2.
必须以
<c:choose></c:choose>
的最后分支方式出现;
<c:choose>,<c:otherwise>,<c:when></c:when></c:otherwise></c:choose>
举例:
c_choose.jsp
<!---->
<!---->
<c:set var="count" value="100"></c:set>
<c:choose></c:choose>
<c:when test="${count <=0}"></c:when>
<c:when test="${count<=60&&amp;count&gt;0}"></c:when>
<c:otherwise></c:otherwise>
count
的值是:
<c:out value="${count}"></c:out>
JSTL
详解(四)
迭代标签的使用
如果使用
scriptlets,
那么,我们经常使用
Iterator
或者
Enumeration
来进行迭代,如:
Iterator it = collection.iterator();
while(it.hasNext()){
SomeBean someBean = (SomeBean)it.next();
out.println(someBean.getXXX());
…………..
}
在前面的一次中,我们开发过一个迭代标签,
JSTL
中也提供了对迭代进行支持的标签,并且,他的功能比上一章的强大的多。
JSTL
中的迭代标签有两个:
l <c:foreach>;</c:foreach>
l <c:fortokens>;</c:fortokens>
1
、
<c:fortokens></c:fortokens>
专门处理
TokenString
的迭代,可以指定一个或者是多个分隔符。由于他们使用的很少,在这里就不介绍了。
<div style="LINE-HEIGHT: 130%" align="le