在朋友的强烈推荐下,开始看JSF2.0。看了第一部分。感觉不是太大。接下来继续学习,应该会有不错的体验。。。
使用 JSF 2 简化导航、免除 XML 配置并轻松访问资源 |
级别: 中级 David Geary 2009 年 6 月 15 日
有关 Web 应用程序框架的最佳发源地,人们一直争论不休:是象牙塔(由理论家空想而来)还是现实世界。在后一种情况下,框架的诞生经受了实际需求的严酷考验。凭直觉判断,经受了实际需求的考验要胜过理论家的空想,并且我认为这种直觉完全经得起更进一步的检验。 JSF JSF 2.0 本文是共三部分的系列文章的开篇,主要有两个目标:展示激动人心的 JSF 2 新特性,展示如何最佳地利用这些特性,这样您就能够利用 JSF 2 提供的功能。通过演示 JSF 2 的应用并伴随一些最佳使用技巧,我将阐述前面两个问题。下面是本文将要介绍的技巧:
但是,我将首先介绍贯穿整个系列文章的示例应用程序。本文的应用程序源代码可以 下载 图 1 展示了一个 JSF mashup — 我将它称为 places 应用程序 — 它使用 Yahoo! Web 服务将地址转换为地图,并显示缩放级别和天气预报: 图 1. 从 Yahoo! Web Services 中查看地图和天气信息 要创建一个地点,需要填写地址表单,激活 Go 按钮,然后应用程序将把地址发送给两个 Web 服务:Yahoo! Maps 和 Yahoo! Weather。 Map 服务在 Yahoo! 服务器上返回指向地址映射的 11 个地图 URL,使用不同的缩放级别。Weather 服务返回一些预先组装的 HTML。图像 URL 和 HTML 内容都轻松地显示在一个 JSF 视图中,这要分别感谢 places 应用程序使您能够输入任意数量的地址。您甚至可以多次使用同一个地址 ,如图 2 所示,它实际上演示了缩放级别: 图 2. 缩放级别 places 应用程序有 4 个托管 bean(managed bean),如 表 1 表 1. places 应用程序中的托管 bean
应用程序在会话范围内存储了一组 创建地点非常简单。清单 1 显示了 图 1
当用户激活 Go 按钮并提交表单后,JSF 将调用按钮的操作方法: 清单 2 展示了 清单 2. Place.fetch() 方法
注意 清单 3. 在视图中显示位置
图 3. 视图中显示的位置 zoom 菜单(参见 图 3 清单 4. Place.zoomChanged()
清单 5. Place.getMapUrl()
如 从 Facelets 角度来讲,还需要注意 清单 3 目前为止,前面的代码并没有使用 Facelets,与 JSF 1 相比没有出现显著的变化。现在,我将展示更加大的差异。第一个比较大的差异体现在将要为 JSF 2 应用程序编写的 XML 配置的数量方面。
Web 应用程序的 XML 配置始终是个麻烦问题 — 它非常冗长并且容易出现错误,因此最好将 XML 配置委托给一个框架,比如通过注释、约定或特定于领域的语言。作为开发人员,我们应该能够集中精力实现一些操作,而不是将浪费时间在冗长的 XML 方面。 作为一个典型的例子,清单 6 展示了在使用 JSF 1 的情况下,在 places 应用程序中声明托管 bean 所需的 20 行 XML 代码: 清单 6. JSF 1 的托管 bean 声明
对于 JSF 2,XML 消失了,您将对类使用注释,如清单 7 所示: 清单 7. JSF 2 的托管 bean 注释
按照约定,托管 bean 的名称与类名相同,类名的第一个字母被转换为小写。例如,清单 7 在 清单 7 也可以使用 表 2. JSF 2 托管 bean 注释( @…Scoped 注释只对 @ManagedBean 有效)
从 faces-config.xml 中移除托管 bean 声明将极大地减少 XML,但是在 JSF 2 中,通过使用注释(如我对托管 bean 所做的一样)或是约定(比如 JSF 2 的简化的导航处理),几乎可以去掉所有的 XML 内容。
在 JSF 1 中,导航使用 XML 指定。比如,要从 login.xhtml 转到 places.xhtml,可能使用清单 8 所示的导航规则: 清单 8. JSF 1 中的导航配置规则和用例
要去除 清单 8 清单 9. 通过约定进行导航
对于 清单 9 清单 10. 使用绝对路径的导航
当用户激活 清单 10 默认情况下,JSF 将从一个 XHTML 页面转至另一个 XHTML 页面,但是通过指定 清单 11. 通过重定向进行导航
Java 使用 Groovy 的理由有很多。首先,它要比 Java 语言更加简洁、功能更加强大。还有两个原因:不使用分号,不需要强制转换(casting)。 您可能还没有注意到,在 清单 2 可
JSF 2 提供了定义和访问资源的标准机制。您将自己的资源放到名为 resources 的顶级目录下,并使用一些 JSF 2 标记来在视图中访问这些资源。例如,图 4 展示了 places 应用程序的资源: 图 4. places 应用程序的资源 对资源的惟一需求是它必须位于 resources 目录或 resources 目录的子目录中。可以随意命名 resources 目录的子目录。 在您的视图代码中,可以使用两个 JSF 2 标记访问资源: 清单 12. 在 XHTML 中访问资源
开 JSF 2 资源是可重新定位的 有些情况下,需要使用 JSF 表达式语言(EL)访问资源。比如,清单 13 展示了如何使用 清单 13. 使用 JSF 表达式语言访问资源
在 EL 表达式内访问资源的语法是
到目前为止,我仅仅触及了 JSF 2 特性中最浅显的内容,包括托管 bean、注释、简化导航和资源支持。在本系列随后的两篇文章中,我将探讨 Facelets、JSF 2 的复合组件以及对 Ajax 的内置支持。
学习
获得产品和技术
讨论
|