第Ⅰ部分JavaServer Faces框架 3
第1章 JavaServer Faces简介 3
1.1 什么是JavaServer Faces 3
1.2 JavaServer Faces的历史 4
1.2.1 公共网关接口 4
1.2.2 Servlet API 4
1.2.3 Java服务器页面 5
1.2.4 Apache Struts 5
1.2.5 Spring框架和Spring MVC 6
1.2.6 JavaServer Faces的诞生 6
1.3 JavaServer Faces设计目标 7
1.4 JSF应用程序架构 8
1.4.1 JSF请求处理生命周期 10
1.4.2 JSF导航模型 11
第2章 构建一个简单的JavaServer Faces应用程序 15
2.1 应用程序概述 15
2.1.1 JSFReg应用程序文件 16
2.1.2 JSF软件栈 17
2.1.3 装配JSFReg应用程序 17
2.1.4 配置文件 18
2.1.5 Facelets页面 19
2.2 构建和运行应用程序 28
2.3 应用程序关键部分回顾 30
第3章 JavaServer Faces请求处理生命周期 31
3.1 JSF请求处理生命周期概述 31
3.1.1 请求处理生命周期的功能 32
3.1.2 与基他Wob技术的区别 32
3.1.3 服务吕端视图的自动管理与同步 33
3.1.4 请求处理生命周期的各阶段 34
3.2 通心粉生境垂下生命周期 40
3.3 与请求处理生财戎关的高级主题 43
3.3.1 使用immediate属性 43
3.3.2 阶段侦听器 45
3.3.3 异常处理程序 45
3.4 关键的重创周期概念 46
第4章 Facelets 视图声明语言 47
4.1 JSF中使用模板化的威力 47
4.2 JSP与Facelets 的异同 48
4.3 使用Facelets 执行模板化 50
4.4 Facelets 模板化标签使用指南 53
4.4.1 ui:composition 53
4.4.2 ui:dexorate 54
4.4.3 ui:derinc 55
4.4.4 ui:insen 55
4.4.5 ui:include 55
4.4.6 ui:param 56
4.5 Facelets 非模板化标签使用批南 56
4.5.1 ui:component 56
4.5.2 ui:fragment 57
4.5.3 ui:remove 57
4.5.4 ui:debug 57
第5章 托管bean与JSF表达式语言 59
5.1托管bean概念 60
5.1.1简单托管bean示例 60
5.1.2初始化托管bean属性 62
5.1.3把List和Map声明为托管bean 68
5.1.4托管bean的相互依赖 69
5.1.5使用EL设置托管属性 71
5.2控制托管bean生命周期 71
5.3 JSF表达式语言 74
5.3.1 JSF 1.1与JSF 1.2之间表达式语言的关键区别 74
5.3.2统一EL概念 76
5.3.3值表达式 76
5.3.4表达式操作符 82
5.3.5方法表达式 83
5.4托管 bean的Web应用程序开发细节 86
5.4.1采用编程方式访问托管bean 86
5.4.2使用托管bean作为JSF页面的支撑bean 88
第6章 导航模型 93
6.1使用隐式导航 94
6.2 JSF导航系统概述 96
6.2.1回顾MvC——控制器 96
6.2.2 NavigationHandle——幕后主管 97
6.2.3 Faces动作方法说明 98
6.3构建导航规则 99
6.3.1静态导航示例 100
6.3.2动态导航示例 101
6.4更复杂的导航示例 105
6.4.1使用通配符 105
6.4.2使用条件导航 106
6.4.3使用重定向 108
6.4.4视图参数的XML配置 121
6.4.5在Servlet错误页上使用JSF 组件 122
第7章 用户界面组件模型 123
7.1什么是用户界面组件 123
7.1.1基于组件的Web开发的兴起 124
7.1.2 JavaServer Faces用户界面组件的目标 125
7.2 JSF用户界面组件架构介绍 126
7.2.1用户界面组件树(视图) 129
7.2.2用户界面组件和相关的“活动部分” 131
7.3组件资源 133
7.4用户界面组件和Facelets 133
7.4.1用编程方式访问用户界面组件 133
7.4.2在JSF视图中绑定用户界面组件的有用建议 136
第8章 数据转换与数据验证 139
8.1验证和转换的示例 140
8.2转换和验证揭秘 142
8.3 Faces转换器系统 145
8.3.1 DateTimeConverter 146
8.3.2 NumberConverter 147
8.3.3关联转换器与UIComponent实例 147
8.3.4转换器的生命周期 152
8.3.5定制转换器 153
8.4 Faces验证系统 157
8.4.1 LongRangeValidator 158
8.4.2 DoubleRangeValidator 159
8.4.3 LengthValidator 159
8.4.4必需的工具Required-Validator 160
8.4.5 RegExValidator 160
8.4.6 BeanValidator 161
8.5关联验证器与UIComponent实例 161
8.5.1使用标记关联验证器与UIComponent实例 161
8.5.2利用标记和验证器属性关联验证器与UIComponent实例 162
8.5.3采用编程方式关联验证器与UIComponent实例 163
8.5.4验证器的生命周期 164
8.5.5定制验证器 165
8.6使用JSF的bean验证 166
8.6.1什么是bean验证 167
8.6.2 JSF验证和bean验证之间的区别 167
8.6.3使用JSF的bean验证的细节 168
8.6.4使用bean验证方式验证JSF托管bean属性 170
8.7汇总:视图上的消息 171
8.7.1 FacesContext上与FacesMessage相关的方法 171
8.7.2 UIViewRoot及其Locale属性 173
8.7.3何时、如何创建FacesMessage实例并把它添加到FacesContext 173
8.7.4 FacesMessages的渲染 174
8.7.5消息和bean验证 177
第9章 JSF事件模型 179
9.1 JSF事件模型概述 179
9.2 JSF事件的工作方式 183
9.2.1 Faces事件侦听器接口和事件类 184
9.2.2处理Faces事件的时机 185
9.2.3应用程序事件 187
9.2.4剖析值修改事件 189
9.3编写定制动作和值修改侦听器 190
9.4更多的Faces事件示例 192
9.4.1使用值修改事件自动填充字段 193
9.4.2扩展值修改示例 196
9.5使用阶段事件和侦听器 198
9.6使用系统事件和侦听器 201
9.6.1怎样发布系统事件 204
9.6.2怎样订阅系统事件 205
9.7创建定制应用程序事件和侦听器的一般规则 207
第 Ⅱ部分 扩展JavaServer Faces 211
第10章 应用JSF:虚拟教练应用程序简介 211
10.1虚拟教练应用程序概观 212
10.1.1注册和登录到虚拟教练应用程序 212
10.1.2创建新的训练赛事检测计划 213
10.1.3选择教练 214
10.1.4只有教练可以执行的动作 214
10.2虚拟教练应用程序需求 216
10.3虚拟教练应用程序架构 217
10.4 Facelet页面 217
10.4.1 Web应用程序根目录中的页面 217
10.4.2 /user目录中的页面 218
10.4.3 /trainer目录中的页面 218
10.4.4 /resources目录中的页面 218
10.5支撑bean 219
10.6持久性和事务架构 221
10.7与导航相关的问题 225
10.8创建简单的验证系统 228
10.9重温JSFReg:构建注册系统 232
10.10构建虚拟教练应用程序的核心页面 236
10.10.1创建allEvents.xhtml页面 236
10.10.2 editTrainingEvent.xhtml的教练版本 239
10.10.3创建viewTrainees.xhtml和viewTrainingSessions-ForUser.xhtml页面 242
10.11 UserRegist和EventRegist 245
10.11.1访问和初始化UserRegist实例 245
10.11.2读写User实例 246
10.11.3读写TrainingSession实例 248
10.12访问和初始化EventRegist实例 249
10.13读写Event实例 250
10.14虚拟教练应用程序中的JPA和实体类 252
10.14.1 JPA的XML配置文件persistence.xml 254
10.14.2定制ExceptionHandler示例 255
10.15 虚拟教练应用程序的国际化 257
10.16对于虚拟教练应用程序的最后评论 267
第11章 构建定制用户界面组件 269
11.1构建定制用户界面组件的时机 269
11.2用户界面组件定义 270
11.3简单的JSF用户界面组件 271
11.4简单JSF用户界面组件标记背后的代码 273
11.5为用户界面组件添加行为 274
11.5.1复合组件细节初探 276
11.5.2 #{cc}隐式对象 278
11.6用户界面组件的各部分 279
11.7非组合JSF定制用户界面组件 280
11.7.1构建HtmlHelloWorld示例 280
11.7.2接收表单输入的Hello-World用户界面组件 284
11.7.3 JSF股票报价组件 287
11.8定制界面组件的状态管理 289
11.8.1对StateHelper的写操作 289
11.8.2对StateHelper的读操作 290
11.8.3从StateHelper中删除值 290
11.9将渲染代码提取到渲染器中 291
11.9.1创建定制Facelet标签库TagHandler 292
11.9.2使用RenderKit支持多种客户端设备类型 294
11.10高级复合组件的开发 302
11.10.1为〈vt:loginPanel〉创建支撑类 302
11.10.2回顾复合组件特性 307
11.11将JSF组件打包成自包含的Jar文件 307
11.12将复合组件打包成jar文件 307
11.12.1将复合组件Facelet文件打包 307
11.12.2为定制组件库声明定制名称空间URL 307
11.12.3将复合组件的支撑类打包 308
11.13将非复合组件打包成Jar文件 308
11.13.1 JSF运行时如何装载faces-config.xml文件 308
11.13.2 JSP运行时如何加载TLD文件 309
第12章 JSF与Ajax 311
12.1 Ajax概述 311
12.2 JSFReg应用程序中的简单Ajax示例 313
12.3 〈f:ajax〉标签及其特性 320
12.4标准JavaScript资源 326
第13章 构建非用户界面定制组件 329
13.1 JSF中的非用户界面定制组件和装饰 329
13.2非视图定制组件释义 332
13.2.1 PhaseListener 332
13.2.2转换器和验证器 334
13.2.3 ViewHandler 334
13.2.4 VariableResolver和Property-Resolver 335
13.2.5 ELResolver(JSF 1.2) 338
13.2.6 NavigationHandler 347
13.2.7 ActionListener 348
13.2.8 StateManager 349
13.2.9 RenderKit 351
13.2.10 JSF中的工厂模式 352
13.3其他的非用户界面组件主题 364
13.3.1告诉JSF运行时处在软件开发生命周期的哪个阶段:ProjectStage 364
13.3.2 Custom Scopes 365
第14章 保护JavaServer Faces应用程序 367
14.1 Web应用程序安全所涉及的方面和实现过程 367
14.2容器管理的安全 368
14.2.1容器管理的身份验证 368
14.2.2基本身份验证和“领域”的概念 369
14.2.3基于表单的身份验证 370
14.2.4证书身份验证 373
14.2.5容器管理的授权和角色的概念 375
14.2.6容器管理的数据安全 376
14.2.7对“虚拟教练”安全的微小改善 377
14.3用JavaServer Faces实现应用程序管理的安全 378
14.3.1在JSF应用程序中利用JAAS 378
14.3.2在“虚拟教练”中使用JAAS身份验证 379
14.4学习更多关于安全的知识 386
第Ⅲ部分 JavaServer Faces工具与库 389
第15章 配置JavaServer Faces应用程序 389
15.1理解XML方案 390
15.2理解配置文件的处理过程 391
15.3 faces-config.xml文件的顺序 392
15.4 JSF运行时为配置内注扫描类 393
15.5 Faces配置元素 393
15.5.1 absolute-ordering元素 401
15.5.2 action-listener元素 401
15.5.3 after元素 402
15.5.4 application元素 403
15.5.5 application-facto元素 404
15.5.6 attribute元素 404
15.5.7 attribute-class元素 407
15.5.8 attribute-name元素 407
15.5.9 base-name元素 408
15.5.10 before元素 409
15.5.11 behavior元素 410
15.5.12 behavior-class元素 411
15.5.13 behavior-id元素 411
15.5.14 client-behavior-renderer元素 412
15.5.15 client-behavior-renderer-class元素 413
15.5.16 client-behavior-renderer-type元素 414
15.5.17 component元素 414
15.5.18 component-class元素 415
15.5.19 component-family元素 416
15.5.20 component-pe元素 417
15.5.21 converter元素 418
15.5.22 converter-class元素 419
15.5.23 converter-for-class元素 419
15.5.24 converter-id元素 420
15.5.25 default-locale元素 421
15.5.26 default-render-kit-id元素 422
15.5.27 default-validators元素 423
15.5.28 default-value元素 423
15.5.29 el-resolver元素 425
15.5.30 exception-handle-facto元素 425
15.5.31 external-context-facto元素 426
15.5.32 faces-config元素 427
15.5.33 faces-context-facto元素 428
15.5.34 facet元素 428
15.5.35 facet-name元素 430
15.5.36 factory元素 431
15.5.37 from-action元素 431
15.5.38 from-outcome元素 432
15.5.39 from-view-id元素 433
15.5.40 if元素 433
15.5.41 key元素 434
15.5.42 key-class元素 435
15.5.43 lifecycle元素 436
15.5.44 lifecycle-facto元素 437
15.5.45 list-entries元素 437
15.5.46 locale-config元素 439
15.5.47 managed-bean元素 439
15.5.48 managed-bean-class元素 441
15.5.49 managed-bean-name元素 441
15.5.50 managed-bean-scope元素 442
15.5.51 managed-proper元素 443
15.5.52 map-entries元素 445
15.5.53 map-entry元素 446
15.5.54 message-bundle元素 447
15.5.55 name元素 448
15.5.56 navigation-case元素 450
15.5.57 navigation-handler元素 450
15.5.58 navigation-rule元素 451
15.5.59 null-value元素 452
15.5.60 ordering元素 454
15.5.61 others元素 455
15.5.62 partial-view-context-factory元素 456
15.5.63 phase-listener元素 456
15.5.64 proper元素 457
15.5.65 proper-class元素 459
15.5.66 proper-name元素 459
15.5.67 proper-resolver元素 460
15.5.68 redirect元素 461
15.5.69 referenced-bean元素 462
15.5.70 referenced-bean-class元素 462
15.5.71 referenced-bean-name元素 463
15.5.72 render-kit元素 464
15.5.73 render-kit-class元素 465
15.5.74 render-kit-facto元素 466
15.5.75 render-kit-id元素 466
15.5.76 renderer元素 467
15.5.77 renderer-class元素 468
15.5.78 renderer-type元素 469
15.5.79 resource-bundle元素 470
15.5.80 resource-handler元素 471
15.5.81 source-class元素 471
15.5.82 state-manager元素 472
15.5.83 suggested-value元素 473
15.5.84 supported-locale元素 474
15.5.85 system-event-class元素 475
15.5.86 system-event-listener元素 476
15.5.87 system-event-listener-class元素 477
15.5.88 tag-handler-delegate-facto元素 478
15.5.89 to-view-id元素 478
15.5.90 validator元素 479
15.5.91 validator-class元素 480
15.5.92 validator-id元素 481
15.5.93 value元素 481
15.5.94 value-class元素 483
15.5.95 var元素 485
15.5.96 variable-resolver元素 486
15.5.97 view-declaration-language-factory元素 486
15.5.98 view-handler元素 487
15.5.99 view-param元素 488
15.5.100 visit-context-factory元素 489
15.6扩展元素 489
第16章 标准的JSF组件库 493
16.1 JSF、 Facelet和JSP标签术语概览 493
16.2获取并安装标准库 494
16.2.1下载二进制 494
16.2.2下载源代码 495
16.2.3标准核心库 495
16.2.4 f:actionListener标签 497
16.2.5 f:ajax标签(仅限于2.0) 498
16.2.6 f:attribute标签 499
16.2.7 f:convertDateTime标签 500
16.2.8 f:convertNumber标签 501
16.2.9 f:converter标签 502
16.2.10 f:event标签2.0) 503
16.2.11 f:facet标签 504
16.2.12 f:loadBundle标签 504
16.2.13 f:metadata标签2.0) 505
16.2.14 f:param标签 506
16.2.15 f:phaseListener标签(1.2、 2.0) 507
16.2.16 f:selectItem标签 507
16.2.17 f:selectItems标签 508
16.2.18 f:setPropertyActionListener标签(仅限于1.2、 2.0) 510
16.2.19 f:subview标签 510
16.2.20 f:validateBean标签(2.0) 512
16.2.21 f:validateDoubleRange标签 514
16.2.22 f:validateLength标签 514
16.2.23 f:validateLongRange标签 515
16.2.24 f:validateRegex标签(2.0) 516
16.2.25 f:validateRequired标签(2.0) 517
16.2.26 f:validator标签 518
16.2.27 f:valueChangeListener标签 518
16.2.28 f:verbatim标签 519
16.2.29 f:view标签 520
16.2.30 f:viewParam标签(2.0) 521
16.3标准HTML库 522
16.3.1 h:body标签(2.0) 525
16.3.2 h:button标签(2.0) 526
16.3.3 h:column标签 528
16.3.4 h:commandButton标签 530
16.3.5 h:commandLink标签 532
16.3.6 h:dataTable标签 535
16.3.7 h:form标签 538
16.3.8 h:graphicImage标签 540
16.3.9 h:head标签(2.0) 542
16.3.10 h:inputHidden标签 543
16.3.11 h:inputSecret标签 544
16.3.12 h:inputText标签 546
16.3.13 h:inputTextarea标签 549
16.3.14 h:link标签(2.0) 551
16.3.15 h:message标签 554
16.3.16 messages组件 555
16.3.17 h:outputFormat标签 557
16.3.18 h:outputLabel标签 558
16.3.19 h:outputLink标签 560
16.3.20 h:outputScript标签(2.0) 562
16.3.21 h:outputStylesheet标签 563
16.3.22 h:outputText标签 564
16.3.23 h:panelGrid标签 565
16.3.24 h:panelGroup标签 568
16.3.25 h:selectBooleanCheckbox标签 569
16.3.26 h:selectManyCheckbox标签 571
16.3.27 h:selectManyListbox标签 574
16.3.28 h:selectManyMenu标签 577
16.3.29 h:selectOneListbox标签 579
16.3.30 h:selectOneMenu标签 582
16.3.31 h:selectOneRadio标签 585
16.4标准的Facelet模板库(2.0) 587
16.4.1网站项目示例 588
16.4.2 ui:component标签(2.0) 593
16.4.3 ui:composition标签(2.0) 593
16.4.4 ui:debug标签(2.0) 594
16.4.5 ui:decorate标签(2.0) 594
16.4.6 ui:define标签(2.0) 595
16.4.7 ui:agment标签(2.0) 595
16.4.8 ui:include标签(2.0) 596
16.4.9 ui:insert标签(2.0) 597
16.4.10 ui:param标签(2.0) 597
16.4.11 ui:remove标签(2.0) 598
16.4.12 ui:repeat标签(2.0) 598
16.5标准的Facelet复合组件库(2.0) 599
16.5.1示例项目 600
16.5.2 cc:actionSource标签(2.0) 606
16.5.3 cc:attribute标签(2.0) 606
16.5.4 cc:editableValueHolder标签(2.0) 608
16.5.5 cc:extension标签(2.0) 608
16.5.6 cc:facet标签(2.0) 609
16.5.7 cc: implementation标签(2.0) 609
16.5.8 cc:insertChildren标签(2.0) 610
16.5.9 cc:insertFacet标签(2.0) 610
16.5.10 cc:interface标签(2.0) 611
16.5.11 cc:renderFacet标签(2.0) 612
16.5.12 cc:valueHolder标签(2.0) 613
附录 JSF Portlet 615
A.1 Portlet 1.0与Portlet 2.0概述 615
A.1.1 Portlet的生命周期 615
A.1.2 Portlet的模式 616
A.1.3 Portlet的窗口状态 617
A.1.4 Portlet的首选项 617
A.1.5 Inter-Portlet通信 618
A.2 JSF Portlet开发 619
A.2.1 JSF Portlet Bridge 619
A.2.2 JSF portlet视图处理程序 623
A.2.3 JSF ExtemalContext和Portlet API 624
A.2.4 JSF与Portlet首选项 624
A.2.5 JSF与Inter-Portlet通信 626
A.3 ICEfaces Portlet开发 627
A.3.1具有部分提交功能的ICEfaces Ajax 628
A.3.2 ICEfaces Direct-to-DOM RenderKit 629
A.3.3 ice:portlet标签 629
A.3.4 ICEfaces 1.x Portlet Bridge 629
A.3.5 ICEfaces 1.x D2DFacelet-ViewHandler 630
A.3.6 ICEfaces 1.x与Portlet 窗口状态 631
A.3.7 ICEfaces Portlet与并行的DOM视图 631
A.3.8 ICEfaces 1.x扩展请求范围 631
A.3.9 ICEfaces Ajax Push与 Inter-Portlet通信 632
A.3.10 ICEfaces主题与门户主题 635
A.3.11 ICEfaces主题与Liferay主题 636
A.3.12 ICEfaces Ajax Bridge与 Liferay Portal 637
A.3.13 ICEfaces Portlet与Liferay请求特性 638
A.4 PortletFaces 638
A.4.1下载PortletFaces 639
A.4.2 PortletFacesContext 639
A.4.3 PortletFaces标签 640
A.4.4 PortletFaces与Portlet 首选项 641
A.4.5 PortletFaces表达式语言添置 642
A.4.6 PortletFaces与本地化 644
A.4.7 Liferay语言的Portlet一体化 645
A.4.8 改善Liferay与ICEfaces 1.x 的一体化 645