首页 > 代码库 > 第五章_JSTL
第五章_JSTL
5.1、下载JSTL
http://jstl.java.net
5.2、JSTL类库
类别 | 下属功能 | URI | 前缀 |
Core | 变量支持 |
http://java.sun.com/jsp/jstl/core |
c |
流向控制 | |||
URL管理 | |||
杂项 | |||
XML | Core |
http://java.sun.com/jsp/jstl/xml |
x |
流向控制 | |||
转换 | |||
I18n | 语言环境 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
消息格式化 | |||
数字和日期格式化 | |||
数据库 | SQL | http://java.sun.com/jsp/jstl/sql | sql |
功能 | 集合长度 | http://java.sun.com/jsp/jstl/functions |
fn |
字符串操作 |
为了在JSP页面中使用JSTL类库,必须以下列格式使用taglib指令:
<%@ taglib uri=”uri” prefix=”prefix”%>
例如,为了使用Core类库,必须在JSP页面开头处这样声明:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
5.3、通用动作指令
5.3.1、out标签
Out标签对表达式进行运算,并将结果输出到当前的JspWriter。Out的语法有两种形式:
<c:out value=http://www.mamicode.com/”value” [escapeXml=”{true|false}”] [default=”defaultValue”] />
<c:out value=http://www.mamicode.com/”value” [escapeXml=”{true|false}”]>
Default value
</c:out>
5.3.2、set标签
利用set标签可以完成以下工作:
1、创建一个字符串和引用该字符串的一个限域变量。
2、创建一个限域变量,并引用已经存在的某一个限域变量。
3、设置限域对象的属性。
如果利用set创建限域变量,那么处于该标签之后的整个jsp页面将都可以使用该变量。
Set标签的语法有4种形式。第一种形式用来创建一个限域变量,在该变量的value属性中可以指定要创建的字符串,或者现有的限域对象。
No1、
<c:set value=http://www.mamicode.com/”value” var=”varName” [scope=”{page|request|session|application}”] />
No2、
<c:set value=http://www.mamicode.com/”value” var=”varName” [scope=”{page|request|session|application}”] >
Body content
</c:set>
No3、设置限域对象的属性值。Target属性指定限域对象,property属性指定限域对象的属性。要赋给该属性的值通过value属性进行设置:
<c:set target=”target” property=”propertyName” value=http://www.mamicode.com/”value” />
例如,下面的set标签是将字符串Tokyo赋给限域对象address的city属性:
<c:set target=”${address}” property=”city” value=http://www.mamicode.com/”Tokyo” />
No4、值是做为主体内容传递的:
<c:set target=”target” property=”propertyName”>
Body content
</c:set>
5.3.3、remove标签
利用remove标签删除限域变量,语法如下:
<c:remove var=”varName” [scope=”{page|request|session|application}”] />
注意:限域变量引用的对象并没有被删除。因此,如果另一个限域对象也在引用这个对象,那么仍然可以通过另外这个限域对象来访问该对象。
5.4、条件式动作指令
在JSTL中有4个标签可以执行条件式动作指令:if、choose、when和otherwise。
5.4.1、if标签
<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}” />
或者
<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”>
Body content
</c:if>
属性 | 类型 | 描述 |
Test+ | Boolean | 决定是否应该处理某些现有主体内容的测试内容 |
Var | String | 引用测试条件的限域变量名称,var的类型为boolean |
Scope | String | 用var设置的限域变量的范围 |
5.4.2、choose、when和otherwise标签
Choose和when标签的作用与java中的switch和case关键字相似,也就是说,它们为互相排斥的条件式执行提供相关内容。Choose标签内部必须嵌有一个或多个when标签,每个when标签代表可以运行运算和处理的一种情况。Otherwise标签用于默认的条件代码块,如果所有when标签的测试条件运算结果都不为true,就会执行该代码块。如果有otherwise标签,它必须放在最后一个when标签之后。
例如:
<c:choose>
<c:when test=”${param.status==’full’}”>
You atr a full member
</c:when>
<c:when test=”${param.status==’student’}”>
You are a student memeber
</c:when>
<c:otherwise>
Please register
</c:otherwise>
</c:choose>
5.5、iterator动作指令
两个可以执行iterator动作指令的标签:forEach和forTokens。
5.5.1、forEach标签
forEach的语法有两种形式,第一种是将body内容重复一定的次数:
<c:forEach [var=”varName”] begin=”begin” end=”end” step=”step”>
Body content
<c:forEach>
第二种形式用于迭代一个对象集合:
<c:forEach items=”collection” [var=”varName”] [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
Body content
</c:forEach>
属性 | 类型 | 描述 |
Var | String | 引用当前迭代项目的限域变量名称 |
Items+ | 支持的任何类型 | 要迭代的对象集合 |
varStatus | String | 保存迭代状态的限域变量名称,它的值类型为javax.servlet.jsp.jstl.core.LoopTagStatus |
Begin+ | Int | 如果指定了items,那么迭代将从处于指定索引的项开始,该集合中的第一个项索引为0。如果没有指定items,迭代将从该值设定的索引开始。如有指定,begin的值必须大于或者等于0。 |
End+ | Int | 如果指定了items,那么迭代将结束于处于指定索引的项;如果没有指定的items,那么当索引到达指定值时,迭代结束。 |
Step+ | Int
| 步长,迭代会从集合的第一个step项开始,根据step步长逐个地进行,如果有step属性,那么它的值必须大于或者等于1。 |