JSF是Sun公司J2EE标准指定的Web应用框架,得到了众多厂商的支持。本书是JSF方面的名著,共分五个部分。第一部分是JSF基础知识;第二部分是构建UI;第三部分研究将原型转化为实际应用所需的应用代码;第四部分从组件开发的角度来研究JSF;第五部分基于第四部分所讲述的知识给出了大量示例。本书作者是JSF界的权威,在书中提供了大量的实际经验。\r\n 本书适合正在开发Java Web应用的架构师、应用开发人员阅读。
第一部分 JSF探秘\r\n第1章 JSF介绍 2\r\n1.1 这是RAD化的世界 2\r\n1.1.1 什么是JSF 3\r\n1.1.2 业界支持 7\r\n1.2 幕后的技术 7\r\n1.2.1 HTTP 7\r\n1.2.2 servlet 8\r\n1.2.3 portlet 9\r\n1.2.4 JavaBeans 9\r\n1.2.5 JSP和其他显示技术 10\r\n1.3 框架,框架,还是框架 10\r\n1.3.1 为什么使用框架 11\r\n1.3.2 它是模型2的 11\r\n1.3.3 JSF、Struts以及其他框架 12\r\n1.4 组件无处不在 14\r\n1.5 Hello, world! 15\r\n1.5.1 解剖hello.jsp 17\r\n1.5.2 解剖goodbye.jsp 22\r\n1.5.3 检视HelloBean类 23\r\n1.5.4 通过faces-config.xml进行配置 25\r\n1.5.5 配置web.xml 26\r\n1.6 小结 27\r\n第2章 JSF基础 28\r\n2.1 关键部件 28\r\n2.1.1 UI组件 30\r\n2.1.2 呈现器 31\r\n2.1.3 验证器 32\r\n2.1.4 后台bean 33\r\n2.1.5 转换器 34\r\n2.1.6 事件和监听器 35\r\n2.1.7 消息 40\r\n2.1.8 导航 40\r\n2.2 请求处理生命周期 41\r\n2.2.1 阶段1:恢复视图 44\r\n2.2.2 阶段2:应用请求值 46\r\n2.2.3 阶段3:处理验证 47\r\n2.2.4 阶段4:更新模型值 47\r\n2.2.5 阶段5:调用应用 48\r\n2.2.6 阶段6:呈现响应 49\r\n2.3 理解组件和客户端标识符 49\r\n2.3.1 命名容器 52\r\n2.3.2 引用标识符 53\r\n2.4 JSF表达式语言 54\r\n2.4.1 作用域变量 57\r\n2.4.2 使用隐含变量 58\r\n2.4.3 在组件中使用EL 60\r\n2.5 小结 62\r\n第3章 热身:初识JSF 64\r\n3.1 设置JSF环境 64\r\n3.1.1 基本要求 64\r\n3.1.2 选择JSF实现 65\r\n3.1.3 目录结构 65\r\n3.1.4 配置 66\r\n3.2 JSP的角色 73\r\n3.2.1 使用JSP包含 74\r\n3.2.2 与JSTL以及其他JSP定制标签一起使用JSF 75\r\n3.3 创建和初始化bean 80\r\n3.3.1 声明受管bean 82\r\n3.3.2 将List和Map声明为受管bean 90\r\n3.3.3 通过值绑定表达式设置值 93\r\n3.4 在页面海洋中导航 95\r\n3.5 小结 101\r\n第4章 从标准组件开始 102\r\n4.1 一切尽在组件中 102\r\n4.1.1 使用HTML属性 104\r\n4.1.2 理解facet 106\r\n4.1.3 工具的威力 106\r\n4.1.4 幕后的呈现包 108\r\n4.2 组件的通用属性 108\r\n4.3 用UIViewRoot控制页面 109\r\n4.4 用UIParameter设置组件参数 110\r\n4.5 使用Output组件显示数据 112\r\n4.5.1 使用HtmlOutputText显示普通文本 112\r\n4.5.2 与<f:verbatim>标签一起使用UIOutput 113\r\n4.5.3 使用HtmlOutputLabel创建输入标注 116\r\n4.5.4 使用HtmlOutputFormat输出参数化文本 117\r\n4.5.5 使用HtmlOutputLink显示超链接 121\r\n4.6 使用HtmlGraphicImage显示图像 122\r\n4.7 使用HtmlMessage显示组件消息 123\r\n4.8 使用HtmlMessages显示应用消息 126\r\n4.9 使用面板组件进行分组和布局 127\r\n4.9.1 使用HtmlPanelGroup分组组件 128\r\n4.9.2 使用HtmlPanelGrid创建表格 129\r\n4.10 小结 133\r\n第5章 使用输入组件和数据表格组件 135\r\n5.1 注册事件监听器 135\r\n5.1.1 声明值改变事件 136\r\n5.1.2 声明动作事件 136\r\n5.2 通用组件属性 137\r\n5.3 使用HtmlForm处理表单 138\r\n5.4 处理基本用户输入 140\r\n5.4.1 使用HtmlInputText显示基本文本框 140\r\n5.4.2 使用HtmlInputTextarea显示备注字段 141\r\n5.4.3 使用HtmlInputSecret显示口令字段 142\r\n5.4.4 使用HtmlInputHidden声明隐藏字段 143\r\n5.5 使用HtmlSelectBooleanCheckbox来显示复选框 144\r\n5.6 定义条目列表 144\r\n5.6.1 用UISelectItem表示单选条目 145\r\n5.6.2 UISelectItems用作多选条目 147\r\n5.7 处理多项选择 148\r\n5.7.1 HtmlSelectManyCheckbox用作复选框组 149\r\n5.7.2 使用HtmlSelectManyListbox显示列表框 151\r\n5.7.3 HtmlSelectManyMenu用作单选列表框 152\r\n5.8 处理单项选择 153\r\n5.8.1 HtmlSelectOneRadio用作单选按钮组 154\r\n5.8.2 用HtmlSelectOneListbox显示单选列表框 156\r\n5.8.3 使用HtmlSelectOneMenu显示组合框 157\r\n5.9 执行应用命令 158\r\n5.9.1 使用HtmlCommandButton声明按钮 158\r\n5.9.2 使用HtmlCommandLink创建动作链接 160\r\n5.10 使用HtmlDataTable显示数据集 162\r\n5.11 小结 168\r\n第6章 国际化、验证器和转换器 170\r\n6.1 国际化和本地化 170\r\n6.1.1 探究场所 171\r\n6.1.2 创建资源束 173\r\n6.1.3 在组件中使用资源束 174\r\n6.1.4 从后台代码国际化字符串 177\r\n6.2 输入验证 177\r\n6.2.1 使用验证器方法 177\r\n6.2.2 使用验证器 178\r\n6.2.3 使用标准验证器 179\r\n6.2.4 综合不同验证器 181\r\n6.3 类型转换和格式化 182\r\n6.3.1 使用转换器 184\r\n6.3.2 使用标准转换器 185\r\n6.4 定制应用消息 195\r\n6.5 小结 198\r\n第二部分 构建用户界面\r\n第7章 ProjectTrack介绍 200\r\n7.1 需求 200\r\n7.2 概念模型 203\r\n7.3 用户界面 204\r\n7.4 开发团队 206\r\n7.5 小结 206\r\n第8章 不用Java编码开发用户界面:登录页面 207\r\n8.1 开始 208\r\n8.1.1 设置web.xml 209\r\n8.1.2 设置faces-config.xml 210\r\n8.2 创建Login页面 210\r\n8.2.1 从HtmlGraphicImage和HtmlOutputText组件开始 211\r\n8.2.2 添加一个表单 213\r\n8.3 装扮一下 218\r\n8.3.1 对按钮使用图像 218\r\n8.3.2 集成JavaScript 219\r\n8.3.3 添加CSS 220\r\n8.4 添加验证器 221\r\n8.5 用HtmlPanelGrid改善布局 224\r\n8.6 小结 229\r\n第9章 不用Java编码开发用户界面:其他页面 231\r\n9.1 使用定制组件构建页面头部 231\r\n9.1.1 使用定制的工具条组件 235\r\n9.1.2 配置导航规则 236\r\n9.2 使用面板建立数据表格原型 237\r\n9.2.1 Inbox页面 238\r\n9.2.2 配置导航规则 241\r\n9.2.3 Show All页面 242\r\n9.2.4 配置导航规则 242\r\n9.3 创建输入表单 243\r\n9.3.1 Approve a Project页面 243\r\n9.3.2 配置导航规则 248\r\n9.3.3 Reject a Project页面 248\r\n9.3.4 配置导航规则 250\r\n9.3.5 Create a Project页面 251\r\n9.3.6 配置导航规则 255\r\n9.4 Project Details页面 256\r\n9.5 小结 260\r\n第10章 集成应用系统功能 261\r\n10.1 理解JSF开发方法 261\r\n10.2 探究应用程序环境 263\r\n10.3 基于安全重组页面 265\r\n10.4 Login页面 266\r\n10.5 Header页面 270\r\n10.6 集成数据表格 273\r\n10.6.1 Inbox页面 273\r\n10.6.2 Show All页面 280\r\n10.7 集成输入表单 280\r\n10.7.1 更新包含页面 280\r\n10.7.2 Approve a Project页面 283\r\n10.7.3 Reject a Project页面 285\r\n10.7.4 Create a Project页面 286\r\n10.8 Project Details页面 289\r\n10.9 添加错误页面 294\r\n10.9.1 更新web.xml文件 295\r\n10.9.2 更新导航规则 295\r\n10.10 国际化和本地化UI 296\r\n10.10.1 将文本提取到资源束中 296\r\n10.10.2 国际化Header 297\r\n10.10.3 本地化为俄语 299\r\n10.11 小结 301\r\n第三部分 开发应用程序逻辑\r\n第11章 JSF环境 304\r\n11.1 从servlet到JSF 304\r\n11.2 应用程序基础 306\r\n11.2.1 Application类 307\r\n11.2.2 求解表达式 309\r\n11.3 一切尽在上下文 311\r\n11.3.1 FacesContext 312\r\n11.3.2 FacesMessage 313\r\n11.3.3 ExternalContext 315\r\n11.4 事件处理 318\r\n11.4.1 FacesEvent 319\r\n11.4.2 处理动作事件 320\r\n11.4.3 处理值改变事件 322\r\n11.4.4 处理阶段事件 323\r\n11.5 再探组件 325\r\n11.5.1 UI组件 328\r\n11.5.2 UIViewRoot 330\r\n11.5.3 ValueHolder 333\r\n11.5.4 EditableValueHolder 334\r\n11.5.5 SelectItem和SelectItemGroup模型bean 335\r\n11.6 小结 337\r\n第12章 应用程序设计和基本类 338\r\n12.1 饼的层次 338\r\n12.2 烘烤豆子 340\r\n12.2.1 toString方法的重要性 341\r\n12.2.2 序列化 342\r\n12.2.3 一切尽在属性中 342\r\n12.2.4 暴露bean 350\r\n12.3 分析业务层和数据层 351\r\n12.4 开发应用层 353\r\n12.4.1 处理常数 354\r\n12.4.2 组织工具方法 356\r\n12.4.3 初始化singleton 358\r\n12.4.4 适配业务对象 360\r\n12.5 编写一个管理会话状态的Visit对象 365\r\n12.6 开发一个后台bean 基类 368\r\n12.7 小结 371\r\n第13章 后台bean、安全和国际化 372\r\n13.1 编写后台bean 372\r\n13.1.1 线程安全 373\r\n13.1.2 处理错误 373\r\n13.1.3 执行认证 376\r\n13.1.4 使用UIData和参数化监听器列出项目 381\r\n13.1.5 修改项目 391\r\n13.1.6 创建新项目 395\r\n13.1.7 使用UIData对项目历史分页 400\r\n13.1.8 使用JDBC ResultSets和UIData 406\r\n13.2 加入安全机制 410\r\n13.2.1 基于容器的安全和定制的安全 410\r\n13.2.2 使用定制安全 411\r\n13.3 在代码中支持国际化 415\r\n13.3.1 使用资源束国际化文本 415\r\n13.3.2 国际化消息 419\r\n13.4 设计推论和替代选择 423\r\n13.4.1 访问业务层 423\r\n13.4.2 按功能组织bean 424\r\n13.4.3 用后台bean实现的动作方法 425\r\n13.4.4 通过受管bean 创建工具初始化bean 属性 426\r\n13.5 小结 426\r\n第14章 集成JSF与Struts及现有应用 428\r\n14.1 集成意味着什么 428\r\n14.2 何时需要与其他框架一起使用JSF 429\r\n14.3 请求和响应的多面性 429\r\n14.4 集成JSF与Struts应用 431\r\n14.4.1 第一步 433\r\n14.4.2 迁移Struts JSP标签 434\r\n14.4.3 使用JSF动作方法和受管bean 451\r\n14.4.4 谁控制谁 452\r\n14.5 集成JSF和非Struts应用 453\r\n14.6 小结 454\r\n第四部分 编写定制组件、呈现器、验证器和转换器\r\n第15章 JSF环境:组件开发者的视角 456\r\n15.1 三步骤至UI扩展架构之天堂 456\r\n15.2 开发UI 组件 457\r\n15.2.1 决定何时编写UI组件 458\r\n15.2.2 类和接口 459\r\n15.2.3 通过方法绑定进行事件处理 469\r\n15.2.4 注册 470\r\n15.2.5 JSP集成 472\r\n15.3 开发呈现器 479\r\n15.3.1 决定何时需要编写呈现器 482\r\n15.3.2 Renderer类 483\r\n15.3.3 RenderKit类 484\r\n15.3.4 注册 485\r\n15.3.5 JSP集成 488\r\n15.4 开发验证器 488\r\n15.4.1 Validator接口 489\r\n15.4.2 注册 490\r\n15.4.3 JSP集成 492\r\n15.5 开发转换器 493\r\n15.5.1 Converter接口 494\r\n15.5.2 注册 495\r\n15.5.3 JSP集成 497\r\n15.6 处理国际化 498\r\n15.7 封包UI扩展 498\r\n15.8 小结 499\r\n附录A 在非JSP环境中使用JSF 501\r\nA.1 JSF如何处理显示技术 501\r\nA.2 使用基于类的页面创建视图 502\r\nA.3 通过XUL创建视图 504\r\nA.4 其他选择 506\r\n参考文献 507\r\n第五部分 编写定制组件、呈现器、验证器和转换器:示例1\r\n第16章 UIInputDate:一个简单的输入组件 512\r\n16.1 编写UIInputDate类 513\r\n16.1.1 编码 514\r\n16.1.2 解码 520\r\n16.1.3 实现StateHolder方法 521\r\n16.2 注册组件 522\r\n16.3 JSP集成 522\r\n16.3.1 编写JSP 定制标签 522\r\n16.3.2 验证标签 524\r\n16.3.3 将标签添加到标签库 525\r\n16.4 使用组件 527\r\n16.5 小结 528\r\n第17章 RolloverButton呈现器:JavaScript支持的呈现器 530\r\n17.1 编写RolloverButtonRender类 532\r\n17.1.1 编码 533\r\n17.1.2 解码 536\r\n17.1.3 注册呈现器 537\r\n17.2 JSP集成 537\r\n17.2.1 编写HtmlBaseTag类 538\r\n17.2.2 编写JSP定制标签 540\r\n17.2.3 验证标签 543\r\n17.2.4 将标签添加到标签库中 544\r\n17.3 使用呈现器 546\r\n17.4 包装现有的呈现器 548\r\n17.5 小结 552\r\n第18章 UIHeadlineViewer:一个复合的数据感知组件 553\r\n18.1 RSS和Informa API 555\r\n18.2 在Informa中使用UIData 558\r\n18.3 子类化DataModel 559\r\n18.4 编写UIHeadlineViewer类 562\r\n18.5 注册组件 573\r\n18.6 JSP集成 574\r\n18.6.1 编写JSP定制标签 574\r\n18.6.2 将标签添加到标签库 580\r\n18.7 使用组件 581\r\n18.8 小结 585\r\n第19章 UINavigator:模型驱动的工具条组件 586\r\n19.1 编写模型类 588\r\n19.2 编写UINavigator类 591\r\n19.2.1 实现ActionSource方法 593\r\n19.2.2 覆盖UIComponentBase方法 595\r\n19.2.3 实现StateHolder方法 597\r\n19.2.4 开发NavigatorActionListener:一个定制ActionListene 598\r\n19.3 注册组件 599\r\n19.4 编写ToolbarRenderer 类 599\r\n19.4.1 编码 600\r\n19.4.2 解码 607\r\n19.5 注册呈现器 608\r\n19.6 JSP集成 608\r\n19.6.1 编写NavigatorToolbarTag组件标签 609\r\n19.6.2 编写NavigatorItemTag 标签处理器 612\r\n19.6.3 将标签添加到标签库 616\r\n19.7 使用组件 619\r\n19.8 小结 622\r\n第20章 验证器和转换器:示例 624\r\n20.1 验证器方法和验证器类 624\r\n20.2 开发验证器 624\r\n20.2.1 编写RegularExpression- Validator类 626\r\n20.2.2 注册验证器 630\r\n20.2.3 与JSP集成 631\r\n20.2.4 使用验证器 634\r\n20.3 何时定制转换器是必要的 636\r\n20.4 开发转换器 636\r\n20.4.1 编写UserConverter类 638\r\n20.4.2 注册转换器 646\r\n20.4.3 JSP集成 647\r\n20.4.4 使用转换器 651\r\n20.5 小结 652\r\n附录B JSF IDE和实现概览 653\r\nB.1 使用 JSF with Oracle JDeveloper 653\r\nB.1.1 Oracle对JSF的看法 654\r\nB.1.2 何为ADF Faces 组件 654\r\nB.1.3 JDeveloper 探究 656\r\nB.1.4 构建ProjectTrack的登录页面 657\r\nB.1.5 夸奖一番 668\r\nB.2 在WebSphere Studio中使用JSF 668\r\nB.2.1 探究WebSphere Studio 668\r\nB.2.2 构建ProjectTrack的Login页面 670\r\nB.2.3 夸奖一番 681\r\nB.3 JSF和Java Studio Creator 682\r\nB.3.1 使用Java Studio Creator 682\r\nB.3.2 构建ProjectTrack的Login页面 684\r\nB.3.3 夸奖一番 692\r\nB.4 JSF实现 693\r\n附录C 扩展核心JSF类 694\r\nC.1 隐藏于幕后的类 694\r\nC.2 替换或者扩展可插入类 698\r\nC.2.1 配置可插入类 698\r\nC.2.2 装饰可插入类 699\r\nC.2.3 替换可插入类 703\r\n附录D JSF配置 712\r\nD.1 公共属性 713\r\nD.2 公共元素 713\r\nD.2.1 <icon> 713\r\nD.2.2 <property> 714\r\nD.2.3 <attribute> 714\r\nD.2.4 <facet> 715\r\nD.3 日常配置和可插入类 715\r\nD.3.1 <application> 715\r\nD.3.2 <managed-bean> 716\r\nD.3.3 <referenced-bean> 718\r\nD.3.4 <navigation-rule> 718\r\nD.4 用户界面扩展 719\r\nD.4.1 <component>>720\r\nD.4.2 <render-kit> 720\r\nD.4.3 <validator>>721\r\nD.4.4 <converter> 722\r\nD.5 高级特征 722\r\nD.5.1 <lifecycle> 722\r\nD.5.2 <factory> 722\r\n附录E 时区、国家(地区)、语言和货币代码 724\r\nE.1 时区代码 724\r\nE.2 语言代码 733\r\nE.3 国家(地区)代码 736\r\nE.4 货币代码 741
Kito Mann是JSF领域世界级的专家,JSF标准制订小组成员,广受欢迎的JSF社区JSFCentral.com的创立者。他拥有10多年丰富的Java开发经验,曾担任许多财富500强公司包括英国保诚集团和摩根大通集团的技术顾问,并撰写了多篇Java相关技术的文章。
我一直喜欢写作。作为一名计算机技术人员,我发现在某些方面人文科学要比计算机科学容易得多——前提是,我能够设法让教授信服,我已经阅读了他给我开出的成打的参考书。20世纪90年代后期,我终于将我对写作的痴迷和对软件开发的困惑,通过撰写杂志文章和技术书评融合在一起。后来,在2000年,我结束了财富500强公司的咨询生涯,成立了一家创业公司。
这很好,不过有些迟了。但是我羡慕那些加入创业公司的朋友,并着迷于那些杂志文章中的精彩故事已经很久了。我选择的起点是做一个商业计划切合实际的教育应用服务提供商(最近被McGraw-Hill收购)。我们产品的主要部分是一个基于Web的应用。作为首席架构师,我的任务之一就是构建它(当然,还需要一些其他的精神支柱)。我们没有使用自己开发的Web应用框架,而是选择了Struts,这在当时是一个很好的决定。经过几个发布周期后,我逐渐知晓了Struts的优势和弱点,以及在一个具有不同背景成员的团队中,开发任务紧急的Web应用所涉及的各种问题。
经过两年的煎熬和对女友Tracey的忽视后,我辞职了,并且花了一段时间来休整。在充分休整后,我又开始尽情地吸收新技术的信息,并被JSF技术深深吸引。JSF似乎是日渐增长的框架热的一个终极答案。此外,因为JSF抽象了Web开发中如此之多令人厌烦的细节,它似乎在很多方面都领先于Struts。我很清楚JSF是Java Web开发中的下一主流。
我又跃跃欲试,想写些架构规范和备忘录之外的东西了,写一本JSF图书的想法油然而生。我审阅过Manning出版社的好几本书,所以联络了负责人讨论写书事宜。经过几轮游说,Manning出版社同意了,计划正式启动。对于规范是否会在2004年3月最终发布前经历根本性的变化,我几乎一无所知(如果我有个水晶球,我根本不会在2003年年初就写这么多,要知道重写可不是一件好玩的事情)。
在过去的一年半中,发生了很多事情。2003年5月,我和Tracey结婚(看来离开创业公司是一件好事)。那年年底,我启动了JSF Central,这是一个专注于JSF社区的网站,包含各种资源和一个便捷FAQ。终于,在2004年3月,JSF 1.0发布了(5月发布了1.1维护版)。我相信其结果会给如火如荼的Java Web开发领域再加一把火。它不但可以使日常开发工作更加容易,而且还开启了第三方用户界面(UI)组件产业,就像微软的ASP.NET Web Forms。
从那以后,我努力地工作,以保证本书成为两个方面的催化剂:不但帮助你明白什么是JSF、它如何运作以及如何使用它,而且还教你如何编写自己的UI组件。我也和Oracle、IBM以及Sun的代表一起勾画了如何将JSF与不同的IDE集成。另外,本书也得益于我曾经作为JSF Central网站主编的经历,那个职位使我可以从一个独特的视角观察日益发展的JSF系统。
所以,这才有了你看到的这本书。我希望本书能够激发你对此技术的热情,并且成为你开发项目的有用工具。同时,我也想要再休整一段时间。将你关于本书的建议发送到kmann@virtua.com或者提交到本书的作者在线www.manning.com/mann。当我返回时,我将很高兴能够阅读到它们。
无封面