按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
的情况下,{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 中,后面就可以直接使用{row}调用了。
jstl 中的 c:forEach 不但可以处理 Collection,还可以处理数组和Map,使用
jstl 我们更容易写出结构一致的代码,以初学 jsp 来说,自定义 taglib 还是太
复杂了,所以还是先学习一些常用的 jstl 为好。
例子在 lingo…sample/09…02 下,其中只有 list。jsp 中使用了 jstl。
88 / 148
…………………………………………………………Page 89……………………………………………………………
第 10 章 综合电子留言板
注意
将前九章的知识结合起来,实现一个电子留言板,包括注册登录,发帖回复功能。
如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章:
第 11 章 文件上传。
1。 对电子留言板不感兴趣。
10。1。 电子留言板用户指南
首页显示的是主题列表。
用户如果想发表新主题或者对主题进行回复,必须先注册为会员。
89 / 148
…………………………………………………………Page 90……………………………………………………………
注册后进入登录页面进行登录。
登录后即出现在用户在线列表中。
点击标题可以看到主题的详细信息。
90 / 148
…………………………………………………………Page 91……………………………………………………………
登录以后即可发布新主题。
10。2。 数据库设计
数据库 er 图
91 / 148
…………………………………………………………Page 92……………………………………………………………
共定义了三张表:
1。 user 用户,保存注册用的信息。
2。 thread 主题,用户发起的主题帖子,外键关联 user,对应发表主题的用
户
3。 ment 回复,对主题帖子发起的回复,外键关联user 和 thread,对应
发表回复的用户和回复的主题。
建表 sql 脚本放在 10…01/WEB…INF/sql/import。sql。
…用户
create table user(
id bigint; …主键
username varchar (100); …帐号
password varchar (100); …密码
reg_time datetime; …注册时间
last_login datetime …上次登录时间
);
…主题
create table thread(
id bigint; …主题
title varchar (200); …标题
content varchar (2000); …内容
create_time datetime; …发帖时间
update_time datetime; …更新时间
92 / 148
…………………………………………………………Page 93……………………………………………………………
hit integer; …点击数
user bigint …发帖用户
);
…回复
create table ment(
id bigint; …主题
content varchar (2000); …内容
create_time datetime; …发布时间
user bigint; …回复用户
thread bigint …回复的主题
);
根据数据库表建模。每张表对应三部分:domain,dao 和 servlet。domain 是简
单的 javabean 用来封装数据表中的数据,dao 中进行对数据库的业务操作,
serv