第1章 JSF简介 1
1.1 JSF概述 1
1.1.1 JSF的定义 1
1.1.2 JSF与MVC设计模式 2
1.1.3 JSF设计目标 3
1.2 JSF的优势 4
1.2.1 可视化开发 5
1.2.2 可重用UI组件 7
1.2.3 集中式页面导航 8
1.2.4 事件驱动 8
1.2.5 表示层和业务层的分离 9
1.2.6 用户界面到业务逻辑的直接映射 9
1.2.7 清晰的角色分工 10
1.2.8 Web开发的官方标准之一 11
1.3 JSF的开发工具NetBeans 11
1.3.1 NetBeans简介 12
1.3.2 NetBeans版本 13
1.3.3 安装NetBeans 14
1.3.4 熟悉NetBeans的界面 14
1.3.5 配置应用服务器 15
1.3.6 配置数据库服务器 16
1.3.7 JSF,就是这么简单 17
第2章 快速入门 18
2.1 一个简单的JSF例子:WebLogin程序 18
2.2 WebLogin的概要设计 19
2.2.1 业务功能设计 19
2.2.2 网页设计 19
2.2.3 导航设计 21
2.2.4 应用集成设计 22
2.3 WebLogin的详细设计 22
2.3.1 创建JSF项目 22
2.3.2 编写用户身份验证的业务逻辑 24
2.3.3 编写网页 25
2.3.4 配置页面导航 32
2.3.5 应用集成 34
2.4 运行WebLogin 42
第3章 UI组件 43
3.1 UI组件概述 43
3.1.1 组件的功能 43
3.1.2 组件和组件类 44
3.1.3 组件和页面Bean的关系 45
3.1.4 组件的事件及其响应 46
3.1.5 组件外观和CSS 47
3.2 组件的一般属性 49
3.2.1 id属性 49
3.2.2 style属性 49
3.2.3 styleClass属性 50
3.2.4 required属性 51
3.2.5 toolTip属性 52
3.2.6 disabled属性 53
3.2.7 visible属性 55
3.2.8 rendered属性 57
3.2.9 tabIndex属性 58
3.3 基本组件 59
3.3.1 标签组件 59
3.3.2 静态文本组件 62
3.3.3 文本字段组件 64
3.3.4 文本区域组件 68
3.3.5 按钮组件 71
3.3.6 超级链接组件 76
3.3.7 图像超级链接组件 79
3.3.8 下拉列表组件 79
3.3.9 列表框组件 85
3.3.10 复选框组件 88
3.3.11 复选框组组件 90
3.3.12 单选按钮组件 93
3.3.13 单选按钮组组件 94
3.3.14 图像组件 94
3.3.15 表组件 95
3.3.16 表行组组件 100
3.3.17 表列组件 101
3.3.18 口令字段组件 104
3.3.19 隐藏字段组件 105
3.3.20 日历组件 108
3.3.21 文件上传组件 109
3.3.22 树组件 112
3.3.23 树节点组件 113
3.3.24 锚点组件 117
3.3.25 消息组件 118
3.3.26 消息组组件 119
3.4 虚拟表单 120
3.4.1 虚拟表单的定义 121
3.4.2 虚拟表单的用途 122
第4章 页面导航 127
4.1 页面导航概述 127
4.1.1 Web应用的页面与导航 127
4.1.2 集中式的JSF页面导航 128
4.1.3 页面导航的可视化设计 130
4.1.4 导航规则 131
4.2 在JSF页面中导航 132
4.2.1 导航的触发 132
4.2.2 触发导航的组件类型 133
4.2.3 静态导航和动态导航 134
4.2.4 用动作类组件实现静态导航 134
4.2.5 在动作类组件的静态导航中加入业务逻辑 136
4.2.6 用输入类组件实现静态导航 136
4.2.7 用动作类组件实现动态导航 137
4.2.8 用导航实现页面刷新重载 138
4.3 高级导航应用 141
4.3.1 从任意页面导航到指定页面 142
4.3.2 在导航页面之间传递参数 144
第5章 托管Bean和统一表达式语言EL 150
5.1 托管Bean和EL概述 150
5.1.1 托管的含义 150
5.1.2 用EL访问托管Bean 152
5.1.3 托管Bean和EL的用途 153
5.2 托管Bean的范围 154
5.2.1 请求范围 157
5.2.2 会话范围 158
5.2.3 应用范围 159
5.2.4 使用正确的范围 160
5.3 绑定 161
5.3.1 值绑定 162
5.3.2 动作类组件的方法绑定 164
5.3.3 输入类组件的方法绑定 166
5.3.4 实例绑定 169
5.4 使用页面Bean 171
5.4.1 页面和页面Bean 171
5.4.2 页面Bean的生命周期方法 172
5.4.3 响应动作事件 174
5.4.4 响应值改变事件 175
5.4.5 动态生成UI组件 176
5.5 使用请求Bean 178
5.5.1 默认的和自定义的请求Bean 178
5.5.2 请求Bean的生命周期方法 179
5.5.3 在相邻页面之间传递参数 180
5.6 使用会话Bean 184
5.6.1 会话和会话Bean 184
5.6.2 默认的和自定义的会话Bean 186
5.6.3 会话Bean的生命周期方法 187
5.6.4 管理会话 189
5.6.5 跨页面共享信息 194
5.7 使用应用Bean 196
5.7.1 Web应用和应用Bean 196
5.7.2 默认的和自定义的应用Bean 197
5.7.3 应用Bean的生命周期方法 198
5.7.4 跨会话共享信息 199
第6章 事件驱动 202
6.1 Java事件驱动概述 202
6.1.1 事件驱动模式概述 202
6.1.2 事件类 203
6.1.3 监听器接口 204
6.1.4 监听器 205
6.1.5 事件源 205
6.1.6 事件驱动的实例 211
6.2 JSF的事件驱动模式 212
6.2.1 JSF事件类 213
6.2.2 JSF监听器接口 214
6.2.3 JSF监听器 214
6.2.4 JSF监听器的注册 215
6.2.5 JSF的回调方法 216
6.2.6 JSF的事件队列 218
6.3 动作事件 220
6.3.1 动作事件类 221
6.3.2 动作监听器接口 221
6.3.3 响应动作事件 222
6.3.4 动作事件源 223
6.3.5 动作事件示例 224
6.4 值改变事件 228
6.4.1 值改变事件类 229
6.4.2 值改变监听器接口 230
6.4.3 响应值改变事件 230
6.4.4 值改变事件源 232
6.4.5 值改变事件示例 233
6.5 阶段事件 234
6.5.1 阶段事件类 235
6.5.2 阶段监听器接口 236
6.5.3 响应阶段事件 236
6.5.4 阶段事件源 237
6.5.5 阶段事件示例 238
第7章 转换器 242
7.1 转换器概述 242
7.1.1 问题的提出 242
7.1.2 转换器的用途 243
7.1.3 转换器的原理 245
7.2 编写转换器 247
7.2.1 转换器接口 247
7.2.2 标准转换器 249
7.2.3 自定义转换器 252
7.3 注册转换器 253
7.3.1 类型注册 254
7.3.2 名称注册 255
7.3.3 默认注册 256
7.4 托管转换器 257
7.5 引用转换器 258
7.5.1 自动引用 258
7.5.2 通过converter属性引用 259
7.5.3 通过〈f:converter〉标签引用 261
7.5.4 通过专用标签引用 262
7.5.5 不引用转换器 263
7.6 转换器示例 263
7.6.1 使用标准转换器 263
7.6.2 DateTime标准转换器 264
7.6.3 Number标准转换器 269
7.6.4 替换标准转换器 274
7.6.5 自定义类型的转换 278
第8章 验证器 284
8.1 验证器概述 284
8.1.1 验证器的用途 284
8.1.2 验证器的原理 285
8.2 编写验证器和验证方法 286
8.2.1 验证器接口 287
8.2.2 标准验证器 287
8.2.3 自定义验证器 289
8.2.4 验证方法 290
8.3 注册验证器 291
8.3.1 名称注册 291
8.3.2 默认注册 292
8.4 托管验证器 292
8.5 引用验证器 293
8.5.1 通过validatorExpression属性引用 294
8.5.2 通过〈f:validator〉标签引用 296
8.5.3 通过专用标签引用 297
8.6 验证器示例 298
8.6.1 使用标准验证器 298
8.6.2 用代码控制验证器 299
8.6.3 使用自定义验证器 302
第9章 消息 305
9.1 JSF的消息机制 305
9.2 消息类 306
9.2.1 消息类及其属性和方法 307
9.2.2 消息类的实例化 307
9.3 消息包 308
9.3.1 Java类形式的消息包 308
9.3.2 属性文件形式的消息包 310
9.4 消息的产生 311
9.4.1 注册消息包 311
9.4.2 引用消息 312
9.5 消息的排队 312
9.5.1 将消息加入队列 313
9.5.2 指定关联UI组件 313
9.5.3 页面Bean的消息实用方法 315
9.6 消息的显示 315
9.7 带参数消息 316
9.8 标准消息及其替换 316
9.8.1 标准消息 316
9.8.2 替换标准消息 318
第10章 数据库访问及持久化 321
10.1 数据库访问模型 321
10.2 缓存行集 325
10.2.1 实例化 325
10.2.2 初始化 326
10.2.3 数据读取 326
10.2.4 光标操作 327
10.2.5 增删改 328
10.2.6 保存 329
10.2.7 带参数的缓存行集 330
10.3 缓存行集数据提供器 331
10.3.1 实例化 331
10.3.2 配置 332
10.3.3 数据读取 334
10.3.4 用EL表达式访问缓存行集数据提供器 334
10.4 数据库访问实例 338
10.4.1 MySQL的下载、安装和配置 338
10.4.2 建表 340
10.4.3 建立外键关系 342
10.4.4 添加模拟数据 343
10.4.5 用列表框组件显示表字段 344
10.4.6 用表组件操作表数据 347
10.4.7 主从式数据访问 352
10.5 持久化 356
10.5.1 持久化技术概述 356
10.5.2 持久化单元 357
10.5.3 持久化标注 358
10.5.4 实体管理 359
10.5.5 事务管理 360
10.5.6 主键生成策略 361
10.5.7 查询 362
10.5.8 带参数查询 363
10.5.9 命名查询 364
10.5.10 JSF与持久化 365
10.5.11 NetBeans中的持久化 365
10.5.12 持久化示例 366
第11章 JSF实例:论坛 376
11.1 需求分析 376
11.1.1 术语解释 376
11.1.2 用户管理 380
11.1.3 帖子管理 381
11.2 数据库设计 382
11.2.1 注册用户表 383
11.2.2 帖子表 383
11.2.3 主题表 383
11.2.4 回帖表 383
11.2.5 置顶表 384
11.2.6 表间关系 384
11.3 功能设计 384
11.3.1 用户注册 384
11.3.2 用户封闭 385
11.3.3 用户解封 385
11.3.4 用户登录 385
11.3.5 修改密码 386
11.3.6 用户退出 386
11.3.7 强制下线 386
11.3.8 密码重设 386
11.3.9 设管 387
11.3.10 撤管 387
11.3.11 用户删除 387
11 3.12 查询用户列表 388
11.3.13 发新帖 388
11 3.14 回复 388
11.3.15 修改帖子 388
11.3.16 删除帖子 389
11.3.17 主题置顶 389
11.3.18 撤销置顶 389
11.3.19 主题列表 389
11.3.20 阅读主题 390
11.3.21 搜索帖子 390
11.3.22 在线用户数统计 390
11.3.23 帖子数统计 390
11.3.24 今日新帖数统计 390
11.4 页面设计 391
11.4.1 首页 391
11.4.2 用户管理页面 391
11.4.3 用户删除确认页面 391
11.4.4 密码重设页面 391
11.4.5 帖子删除确认页面 391
11.4.6 我的论坛页面 391
11.4.7 登录页面 391
11.4.8 登录成功页面 391
11.4.9 注册页面 392
11.4.10 注册成功页面 392
11.4.11 修改密码页面 392
11.4.12 修改密码成功页面 392
11.4.13 用户退出成功页面 392
11.4.14 发新帖页面 392
11.4.15 发新帖成功页面 392
11.4.16 回复页面 392
11.4.17 回复成功页面 392
11.4.18 阅读主题页面 392
11.4.19 帖子修改页面 393
11.5 导航设计 393
11.5.1 页面导航表 393
11.5.2 页面导航配置文件 393
11.5.3 异常处理 395
11.5.4 业务集成 396
11.6 详细设计 397
11.6.1 数据库表 397
11.6.2 业务逻辑Bean 400
11.6.3 持久化 404
11.6.4 会话管理 408
11.6.5 页面编码 411
11.6.6 表和数据提供器 457
11.6.7 异常处理 465
11.6.8 主题表排序 467
11.6.9 参数传递 468
第12章 源代码的下载和使用 470
12.1 下载方式 470
12.2 源代码压缩文件包内容 470
12.2.1 源程序目录 470
12.2.2 SQL文件 472
12.3 准备开发环境 473
12.3.1 JDK 473
12.3.2 NetBeans 473
12.3.3 GlashFish 473
12.4 安装和配置MySQL数据库 474
12.4.1 下载和安装 474
12.4.2 创建数据库、表格、视图并添加数据 474
12.4.3 在NetBeans中建立数据库连接 475
12.5 打开并运行范例程序 476
12.6 常见问题 477