return EVAL_BODY_INCLUDE;
} else {
return EVAL_PAGE;
}
}
public int doAfterBody() {
if (this。process()) {
return EVAL_BODY_AGAIN;
} else {
return EVAL_PAGE;
}
}
为了实现循环,我们需要监听两个事件。
doStartTag()方法在标签开始时执行,要记住每次都要对类进行初始化,
避免上一次的遗留数据对操作造成影响。然后判断是否有数据需要处理,
如果有,则返回 EVAL_BODY_INCLUDE 开始处理标签里的内容,如果没有,
返回 EVAL_PAGE 跳过标签内容执行标签下面的内容。
85 / 148
…………………………………………………………Page 86……………………………………………………………
doAfterBody()方法在每次处理完标签内部内容后执行,判断循环是否已
经结束,如果可以继续循环,返回 EVAL_BODY_AGAIN 用循环得到新的数据
再次处理标签内部内容,如果循环结束就返回 EVAL_PAGE 结束标签。
4。 第四步,进行循环时的处理。
private boolean process() {
if (this。iterator。hasNext()) {
String row = this。index % 2 != 0 ? 〃odd〃 : 〃even〃 ;
pageContext。setAttribute(var + 〃_index〃; this。index);
pageContext。setAttribute (var + 〃_row〃; row);
Object item = this。iterator。next();
pageContext。setAttribute(var; item);
this。index++;
return true;
} else {
return false;
}
}
process()方法在 doStartTag()和 doAfterBody()中都会用到,它的用途
是判断循环是否结束,如果还可以继续循环就返回 true,否则返回 false。
如果还可以继续循环,则从 iterator 中循环获得下一个数据,根据var
的值放到pageContext 中,同时放到pageContext 里的还有 index 索引值
和 row 索引值的奇偶,odd 代表奇数行,even 代表偶数行。var=〃contact〃
的情况下,{contact}表示循环数据,{contact_index}表示索引值,
{context_row}表示奇偶性,这些都可以在标签内部的 jsp 中直接使用。
经过如此一番周折,ForTag 可以从标签获得参数,并对数据进行循环处理了。
最后一步还要为它编写 tld (taglib definition)标签库定义文件,提供给 jsp
指令(direction)引用。
1。0
1。2
lingirl
http://family168。/lingirl
for
86 / 148
…………………………………………………………Page 87……………………………………………………………
anni。ForTag
var
true
true
java。lang。String
items
true
true
java。util。Collection
前面一大堆复杂难懂的标签指定我们使用 taglib 规范的版本,进入 tag 部分才
开始定义名字为 for 的标签,使用 tag…class 指定对应的类,再定义两个参数:
var 和 items。required 说明参数不能省略必须手工设置。rtexprvalue 表示参
数部分可以使用 el,否则就只能用字符串。type 对应的是类中使用的真实类型,
taglib 会根据它做类型转换。
全部的例子在 09…01 目录下,注意编译taglib 需要将 jsp…api。jar 加入
classpath,参考WEB…INF/src/pile。bat。
结果,为了替换 4,5 行 java 代码,我们需要编写一个 ForTag。java,一个对应
tld 文件,在 jsp 中引用 tld,最后才能使用ForTag 对 list 进行循环。不得不
说一句:“太麻烦啦。”
9。2。 关于 jstl
taglib 太笨重,也太复杂了。编写一个 taglib 花费的力气太大,又不容易修改
或扩展。一般情况下,taglib 都是由别人写好,我们再直接调用。sun 就为标签
库定义了一套标准,叫做 jstl (java standard taglib)java 标准标签库,可
以去http://jakarta。apache。org/taglibs/index。html 下载 apache 实现的
jstl。
想在项目里使用 jstl,首先要把 jstl。jar 和 standard。jar 两个文件放到
/WEB…INF/lib/目录下。
87 / 148
…………………………………………………………Page 88……………………………………………………………
然后在 list。jsp 中加入 jsp 指令(direction)引用 jstl 中定义的标签库。
这里的 uri 是固定写法,只要写成这个就可以使用 jstl 了,jstl 中包含多个标
签库,这里我们只用到 core。
经过上述配置,现在可以使用 jstl 了,代码如下:
{contact。username}
{contact。sex}
{contact。email}
{contact。qq}
{contact。descn}
修改
| 删除
这里使用的是 c:forEach,它也是一个执行循环的标签,var 和 items 参数的意
义与上边谈到的 lingirl:for 标签已知,分别代表循环变量和循环数据。唯一不
同的是多了一个varStatus 参数,这个参数表示当前行的状态,其中
status。index 表示当前行的序号,我们就通过序号计算奇偶行。
在 c:forEach 标签中,我们还看到一个 c:set 标签,它的作用是可以将指定的变
量保存到作用域中,默认作用域是 page,这里我们使用 status。index 计算出行
的奇偶性,然后保存到row 中,后面就可以直接?
小说推荐
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- asp基础入门篇(DOC格式)
- ASP入门与实例-IIS的安装与配置1、运行环境与软件要求Windows 2000 以上(不包括Windows XP Home版)IIS 4.0 以上Microsoft Access 2000Dreamweaver MX2、IIS的安装与配置a.安装IIS若操作系统中还未安装IIS服务器,可打开"控
- 最新章:第23章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- Word2003使用技巧大全(DOC格式)
- Word使用技巧(二)表格使用大全更新时间:2009-11-16 19:32:15 本文共阅读了257次 作者:xushezheng 文章来源:电教组字体大小:大中小一、快速插入表格 拖动“插入表格”能插入的最大表格跟该图标位置、显示分辨率有关。如使用800×600分辨率时最大为18行×28列 二、
- 最新章:第1章
- Excel word ppt office使用技巧大全(DOC格式)
- -Page 1-Excel_word_ppt_使用技巧大全(完全版)Excelwordppt使用技巧大全(2011新版本)I-Page 2-Excel_word_ppt_使用技巧大全(完全版
- 最新章:第338章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章