第1章 入门 1
1.1为什么要选择JavaServerFaces 1
1.2软件安装 2
1.3一个简单的例子 4
1.3.1组成部分 6
1.3.2目录结构 7
1.3.3构建说明 8
1.4示例应用程序分析 9
1.4.1 Beans 9
1.4.2 JSF页面 10
1.4.3导航 13
1.4.4 Servlet配置 15
1.4.5欢迎文件 17
1.5 JSF开发环境 17
1.5.1集成开发环境 17
1.5.2可视构建器工具 18
1.5.3使用Ant构建自动化 20
1.6 JSF框架服务 23
1.7内幕 25
1.7.1呈现页面 26
1.7.2解码请求 27
1.7.3生命周期 28
第2章 受管理Bean 31
2.1 Bean的定义 31
2.1.1 Bean属性 33
2.1.2值表达式 34
2.2消息包 35
2.2.1具有可变部分的消息 37
2.2.2设置应用程序的本地化 37
2.3示例应用程序 39
2.4支撑Bean 45
2.5 Bean作用域 46
2.5.1会话作用域 46
2.5.2应用程序作用域 47
2.5.3请求作用域 47
2.5.4生命周期说明 48
2.6配置Bean 48
2.6.1设置属性值 49
2.6.2初始化列表和映射 49
2.6.3链接Bean定义 51
2.6.4字符串转换 53
2.7值表达式的语法 54
2.7.1使用方括号 55
2.7.2映射和列表表达式 55
2.7.3解析初始术语 56
2.7.4复合表达式 57
2.7.5方法表达式 58
第3章 导航 61
3.1静态导航 61
3.2动态导航 63
3.3高级导航问题 73
3.3.1重定向 74
3.3.2通配符 75
3.3.3使用from-action 75
3.3.4导航算法 76
第4章 标准JSP标签 79
4.1 JSF核心标签概述 80
4.2 JSF HTML标签概述 82
4.3表单 89
4.4文本字段和文本区域 94
4.4.1隐藏字段 97
4.4.2使用文本字段和文本区域 97
4.4.3显示文本和图片 101
4.5按钮和链接 103
4.5.1使用命令按钮 104
4.5.2使用命令链接 108
4.6选择标签 113
4.6.1复选框和单选按钮 115
4.6.2菜单和列表框 118
4.6.3项目 120
4.7消息 137
4.8面板 142
第5章 数据表 147
5.1数据表标签——h:dataTable 148
5.2一个简单的表 148
5.2.1 h:dataTable属性 151
5.2.2 h:column属性 153
5.3表头、表尾和标题 153
5.4 JSF组件 156
5.5编辑表元 160
5.6样式 163
5.6.1列样式 163
5.6.2行样式 164
5.7数据库表 165
5.8表模型 170
5.8.1编辑表模型 171
5.8.2排序和过滤 176
5.9滚动技术 186
5.9.1使用滚动条滚动表 186
5.9.2使用分页组件滚动 187
第6章 转换和验证 189
6.1转换和验证过程概述 189
6.2使用标准转换器 190
6.2.1数字和日期的转换 190
6.2.2转换错误 194
6.2.3一个完整的转换器的例子 199
6.3使用标准验证器 202
6.3.1验证字符串长度和数值范围 202
6.3.2必需值的检查 203
6.3.3显示验证错误 204
6.3.4跳过验证 205
6.3.5一个完整的验证例子 205
6.4使用自定义转换器和验证器编程 207
6.4.1实现自定义转换器类 207
6.4.2实现自定义验证器类 220
6.4.3注册自定义验证器 223
6.4.4使用Bean方法验证 225
6.4.5为转换器提供属性 226
6.4.6在多个组件间验证关系 226
第7章 事件处理 231
7.1生命周期事件 232
7.2值变化事件 233
7.3动作事件 238
7.4事件监听器标签 247
7.5直接组件 249
7.5.1使用直接输入组件 250
7.5.2使用直接命令组件 251
7.6从UI到服务器传递数据 252
7.6.1 f:paranm标签 253
7.6.2 f:attribute标签 254
7.6.3 f:setPropertyActionListener标签 255
7.7阶段事件 256
7.8把所有组件放在一起 265
第8章 子视图和Tiles 275
8.1常见布局 275
8.2书籍阅读器和图书馆 276
8.3书籍阅读器 278
8.3.1单一JSF页面 279
8.3.2公共内容包含 285
8.3.3基于JSP程序的包含内容 285
8.3.4 JSF特定的考虑 286
8.4书籍阅读器中的内容包含 287
8.4.1了解Tiles 290
8.4.2安装Tiles 290
8.4.3为书籍阅读器使用Tiles 291
8.4.4参数化Tile 292
8.4.5扩展Tiles 293
8.5图书馆 297
8.5.1嵌入Tiles 298
8.5.2 Tiles控制器 298
第9章 自定义组件、转换器和验证器 311
9.1用于实现自定义组件的类 312
9.1.1标签和组件 314
9.1.2自定义组件开发者的工具箱 316
9.2编码:产生标记 317
9.3解码:处理请求值 320
9.4实现自定义组件标签 325
9.4.1 TLD文件 326
9.4.2标签处理程序类 329
9.4.3微调控制器程序 333
9.4.4在JSF 1.1中定义标签处理程序 336
9.5深入理解微调控制器 341
9.5.1使用外部呈现器 341
9.5.2从外部呈现器中调用转换器 346
9.5.3支持值变化监听器 347
9.5.4支持方法表达式 348
9.5.5示例程序 350
9.6编码JavaScript以避免到服务器往返 356
9.7使用子组件和facets 359
9.7.1处理SelectItem子组件 363
9.7.2处理facets 363
9.7.3编码CSS样式 364
9.7.4使用隐藏字段 366
9.7.5保存和重建状态 367
9.7.6触发动作事件 369
9.7.7使用多页选项卡 376
9.8实现自定义转换器和验证器 382
9.8.1自定义转换器标签 382
9.8.2自定义验证器标签 391
第10章 外部服务 401
10.1使用JDBC访问数据库 401
10.1.1发送SQL语句 401
10.1.2连接管理 403
10.1.3填补连接泄漏 403
10.1.4使用预编译语句 405
10.2配置数据源 406
10.2.1在GlassFish中配置数据库资源 406
10.2.2在Tomcat中配置数据库资源 408
10.2.3访问容器管理的资源 410
10.2.4一个完整的数据库例子 412
10.3 LDAP介绍 421
10.3.1 LDAP目录 421
10.3.2配置 LDAP服务器 423
10.3.3访问LDAP目录信息 426
10.4管理配置信息 431
10.4.1配置Bean 431
10.4.2配置外部上下文 433
10.4.3配置容器管理资源 434
10.4.4创建LDAP应用程序 438
10.5容器管理的验证和授权 450
10.6使用Web服务 461
第11章 Ajax 471
11.1 Ajax基础 472
11.2 JavaScript库 474
11.2.1 Prototype库 475
11.2.2褪色技术库 475
11.3表单自动完成 475
11.4实时验证 478
11.5传送客户端视图状态 483
11.6直接Web远程调用 484
11.7 Ajax组件 486
11.7.1混合组件 487
11.7.2将JavaScript放在呈现器外面 490
11.7.3传输JSP标签属性到JavaScript代码 492
11.8Ajax4jsf 493
11.8.1使用Ajax4jsf实现表单自动完成 494
11.8.2使用Ajax4jsf实现实时验证 498
第12章 开源 509
12.1 Web流——Shale 510
12.1.1对话框配置 513
12.1.2进入对话框 513
12.1.3对话框导航 514
12.1.4对话框作用域 515
12.1.5对话框上下文敏感 517
12.1.6子对话框 519
12.2另一种视图技术——Facelets 521
12.2.1 XHTML视图 522
12.2.2标记通过使用JSF组件替换:jsfc属性 523
12.2.3使用JSF标签 526
12.2.4使用模板的页面合成 528
12.2.5 Facelets自定义标签 530
12.3 EJB集成——Seam 531
12.3.1地址簿 532
12.3.2配置 535
12.3.3实体Bean 536
12.3.4有状态会话Bean 538
12.3.5 JSF DataModel集成 540
12.3.6对话作用域 542
第13章 如何实现 545
13.1 Web用户界面设计 545
13.1.1如何找到更多的组件? 545
13.1.2如何支持文件上传? 548
13.1.3如何显示图像映射 556
13.1.4如何在MyPage中包含一个applet? 557
13.1.5在JSF页面中如何产生二进制数据? 559
13.1.6如何一次在一个页面中显示大型数据集? 569
13.1.7如何产生一个弹出窗口? 575
13.1.8如何有选择地显示和隐藏组件? 583
13.1.9如何自定义错误页面? 584
13.2验证 588
13.2.1如何编写自己的客户端验证标签? 588
13.2.2如何为客户端验证使用Shale验证器? 595
13.2.3如何验证组件间的关系? 596
13.3编程 597
13.3.1在Eclipse中如何使用JSF? 597
13.3.2如何查找配置文件? 600
13.3.3 JSF组件如何访问JAR文件中的资源? 600
13.3.4如何将一系列标签打包到JAR文件中? 604
13.3.5在JavaScript中,如何为产生document.forms[id]取得表单ID? 605
13.3.6如何使JavaScript函数每页只出现一次? 605
13.3.7如何执行初始化或清理工作? 606
13.3.8如何存储一个受管理Bean,使它的生命周期比请求作用域长但比会话作用域短? 606
13.3.9如何扩展JSF表达式语言? 607
13.4调试和日志 610
13.4.1如何解释栈跟踪? 611
13.4.2如何避免“复杂的堆栈跟踪”? 614
13.4.3如何“热部署”应用程序? 614
13.4.4如何注释掉JSF页面的一部分? 615
13.4.5如何找到日志? 616
13.4.6如何查看页面接收了什么参数? 618
13.4.7如何开启JSF容器的日志功能? 619
13.4.8如何调试问题页? 622
13.4.9如何找到库源代码? 623