EL 全名为Expression Language,
它原本是JSTL 1.0为方便存取数据所自定义的语言。
EL变量:
EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username
的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如
找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,
不再继续找下去,但是假如全部的范围都没有找到时,就回传null(见表6-1):
6-2-3 自动转变类型:
自动转变类型,我们来看
下面这个范例:
${param.count + 20}
假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为
上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类
型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能
执行一些数学运算,下面是之前的做法:
String str_count = request.getParameter("count");
隐含对象:
PageScop,RequestScope,sessionScope,applicationScope
param ServletRequest.getParameter(String name)。回传String 类型的值
param 的功能和request.getParameter(String name) 相同, 而paramValues 和
equest.getParameterValues(String name)相同。如果用户填了一个表格,表格名称为username,则我们
就可以使用${param.username}来取得用户填入的值。
所谓条件运算符如下:
${ A ? B : C}
意思是说,当A 为true 时,执行B;而A 为false 时,则执行C。
JSTL是由JCP
(Java Community Process)所指定的标准规格,它主要提供给Java Web 开发人员一个标准通用的
标签函数库。
<c:out>主要用来显示数据的内容
<c:if>的用途就和我们一般在程序中用的if 一样。
语法:
<c:if test="testCondition" [var="varName"]
[scope="{page|request|session|application}"]>
具体内容
</c:if>
test:如果表达式的结果为true,则执行本体内容,false则相反
var: 用来储存test运算后的结果,即true 或false
scope :var 变量的JSP 范围
接下来看下列的范例:
<c:if test="${param.username = = 'admin' }">
ADMIN 您好!! //body 部分
</c:if>
如果名称等于admin,则会显示"ADMIN您好!! "的动作,如果相反,则不会执行<c:if>的body
7-2-3 迭代操作
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>,笔者依此顺序依次说明
这两个标签的使用。
● <c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当
条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法:
语法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>
var :用来存放现在指到的成员
items :被迭代的集合对象
varStatus: 用来存放现在指到的相关成员信息
begin: 开始的位置
end: 结束的位置
step: 每次迭代的间隔数
● <c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forTokens>
var: 用来存放现在指到的成员
items: 被迭代的字符串
delims: 定义用来分割字符串的字符
varStatus: 用来存放现在指到的相关成员信息N
begin: 开始的位置
end :结束的位置
step: 每次迭代的间隔数Y