自动喷油漆设备:EL 表达式tag - 迟却懂的日志 - 网易博客
来源:百度文库 编辑:九乡新闻网 时间:2024/05/06 18:03:16
EL 表达式tag
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
分 类 功能分类 标签名称
Core 表达式操作 out
set
remove
catch
流程控制 if
choose
when
otherwise
迭代操作 forEach
forTokens
分 类 功能分类 标签名称
Core URL操作 import
param
url
redirect
Hello !
语法
语法1:没有本体(body)内容
语法2:有本体内容
default value
属性
名 称 说 明 EL 类 型 必 须 默认值
value 需要显示出来的值 Y Object 是 无
default 如果value的值为null,则显示default的值 Y Object 否 无
escapeXml 是否转换特殊字符,如:< 转换成 < Y boolean 否 true
注意:假若value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。
说明
一般来说,
表7-3
字符 Entity
< <
> >
’ '
” "
& &
范例
1.在网页上显示 Hello JSP 2.0 !! ;
2.在网页上显示 8;
3.在网页上显示由窗体传送过来的data参数之值,假若没有data参数,或data参数的值为null时,则网页上会显示No Data;
4.在网页上显示“
有特殊字符
”;5.在网页上显示“有特殊字符”。
把1+1的结果2储存到number变量中。如果
范例
${3 + 5}
1.将2存入Request范围的number变量中;
2.将8存入Session范围的number变量中;
3. 假若 ${param.number}为null时,则移除Request范围的number变量;若${param.number}不为null时,则将 ${param.number}的值存入Request范围的number变量中;
4.假若 ${param.Username}为null时,则设定User(JavaBean)的name属性为null;若不为null时,则
${param.Username}的值存入User(JavaBean)的name属性(setter机制)。
注意
上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。
语法
属性
名 称 说 明 EL 类型 必须 默认值
var 欲移除的变量名称 N String 是 无
scope var变量的JSP范围 N String 否 page
说明
c:remove var="number" scope="session" />
将number变量从Session范围中移除。若我们不设定scope,则
范例
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%= 3 %>
4
初始设置
pageScope.number | |
---|---|
requestScope.number | |
sessionScope.number |
pageScope.number | |
---|---|
requestScope.number | |
sessionScope.number |
pageScope.number | |
---|---|
requestScope.number | |
sessionScope.number |
一开始各在Page、Request和Session三个属性范围中储存名称为number的变量。然后先使用
语法
… 欲抓取错误的部分
属性
名 称 说 明 EL 类型 必须 默认值
var 用来储存错误信息的变量 N String 否 无
说明
: //可能发生错误的部分
另外,当错误发生在
范例
<%@ page contentType="text/html;charset=GB2312 " %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String eFormat = "not number";
int i = Integer.parseInt(eFormat);
%>
${error_Message}
输出结果
java.lang.NumberFormatException:For input string:"number"
如果把
流程控制==========================================
流程控制分类中包含四个标签:
语法
语法1:没有本体内容(body)
语法2:有本体内容
本体内容
属性
名 称 说 明 EL 类 型 必 须 默认值
test 如果表达式的结果为true,则执行本体内容,false则相反 Y boolean 是 无
var 用来储存test运算后的结果,即true或false N String 否 无
scope var变量的JSP范围 N String 否 page
说明
接下来看下列的范例:
ADMIN您好!! //body部分
如果名称等于admin,则会显示"ADMIN您好!! "的动作,如果相反,则不会执行
除了test属性之外,
流程控制待续
迭代操作==========================================
迭代(Iterate)操作主要包含两个标签:
语法
语法1:迭代一集合对象之所有成员
[begin="begin"] [end="end"] [step="step"]> 本体内容 /c:forEach> 语法2:迭代指定的次数 本体内容
属性
名 称 说 明 EL 类型 必须 默认值
var 用来存放现在指到的成员 N String 否 无
items 被迭代的集合对象 Y Arrays
Collection
Iterator
Enumeration
Map
String 否 无
varStatus 用来存放现在指到的相关成员信息 N String 否 无
begin 开始的位置 Y int 否 0
end 结束的位置 Y int 否 最后一个成员
step 每次迭代的间隔数 Y int 否 1
限制
·假若有begin属性时,begin必须大于等于 0
·假若有end属性时,必须大于begin
范例
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
${item}
另外,
属 性 类 型 意 义
index number 现在指到成员的索引
count number 总共指到成员的总数
first boolean 现在指到的成员是否为第一个成员
last boolean 现在指到的成员是否为最后一个成员
我们可以使用varStatus属性取得循环正在浏览之成员的信息,下面为一个简单的范例
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
的四种属性:
index:${s.index}
count:${s.count}
first:${s.first}
last:${s.last}
语法
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> 本体内容
属性
说明
范例
${item}
上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5个部分,也就是执行循环5次,但是并没有将A,B,C,D,E中的“,”显示出来。items也可以放入EL的表达式,如下:
<%
String phoneNumber = "123-456-7899";
request.setAttribute("userPhone", phoneNumber);
%>
${item}
这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为3份,每执行一次循环就将浏览的部分放到名称为item的属性当中。delims不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:
${item}
此范例会在网页输出ABCDE,也就是说,delims可以一次设定所有想当做分割字符串用的字符。其实用
${item}
上述范例同样也会在网页输出ABCDE。
URL操作 =============================================================
JSTL包含三个与URL操作有关的标签,它们分别为:
如果是使用相对地址,假设存在一个文件名为Hello.jsp,它和使用
如果以“/”开头,那么就表示跳到web站台的根目录下,以Tomcat为例,即webapps目录。假设一个文件为hello.txt,存在于webapps/examples/images里,而context为examples,可以写成以下方式将hello.txt文件包含进我们的JSP页面之中:
接下来如果要包含在同一个服务器上,但并非同一个web站台的文件时,就必须加上context属性。假设此服务器上另外还有一个web站台,名为others,others站台底下有一个件夹为jsp,且里面有index.html这个文件,那么就可以写成如下方式将此文件包含进来:
文
注意
被包含文件的web站台必须在server.xml中定义过,且
erver.xml的设定范例如下:
s
:
reloadable="true" crossContext="true"/> : 除此之外, 我们可以把常重复使用的商标、欢迎语句或者是版权声明,用此方法储存起来,想输出在网页上时,再把它导入进来。假若想要改变文件内容时,可以只改变被包含的文件,不用修改其他网页。 另外,可以在 名 称 说 明 EL 类 型 必 须 默认值 name 参数名称 Y String 是 无 value 参数的值 Y String 否 本体内容 这两个属性都可以使用EL,所以我们写成如下形式: 这样的做法等于是包含一个文件,并且所指定的网址会变成如下: http://java.sun.com?test=1234 范例 下面为一用到 Core_import.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
${output1}
程序中,分别使用
Core_imported.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
${input1}
Core_imported.jsp是被包含的文件,它会把从Core_import.jsp传来的参数分别输出到页面上,必须注意的是input1参数是使用属性范围来传递的,因此可以直接用${input1}来得到参数,而input2则必须使用${param.input2}来得到参数。
此外,笔者还使用
Core_import.jsp的执行结果如图
待续。。。。。。。。