首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

流线化 Web 应用程序开发(4)

流线化 Web 应用程序开发(4)

修改缩放级别zoom 菜单(参见  和 )有一个 onchange="submit()" 属性,因此当用户选择某个缩放级别时,JavaScript submit() 函数提交菜单的环绕(surrounding)表单。提交表单后,JSF 调用菜单的相关值修改侦听器 —Place.zoomChanged() 方法,如清单 4 所示:
清单 4. Place.zoomChanged()
1
2
3
4
public void zoomChanged(ValueChangeEvent e) {
  String value = e.getComponent().getValue()
  zoomIndex = (new Integer(value)).intValue()
}




Place.zoomChanged() 在一个名为 zoomIndex 的 Place 类的成员变量中存储缩放级别。由于导航不会受到与服务器通信的影响,JSF 将重新加载页面,并且地图使用新的缩放级别进行更新,如下所示:<h:graphicImage url="#{place.mapUrl}..."/>。当绘制地图时,JSF 调用 Place.getMapUrl(),它返回当前缩放级别下的地图 URL,如清单 5 所示:
清单 5. Place.getMapUrl()
1
2
3
public String getMapUrl() {
  return mapUrls == null ? "" : mapUrls[zoomIndex]
}




使用少量 Facelets如果曾经使用过 JSF 1,那么很可能会注意到本文的 JSF 2 代码中存在一些细微的差别。首先,我使用了 JSF 2 的新的显示技术 — Facelets — 而不是 JSP。您将从本系列后续文章中看到,Facelets 提供了许多强大的特性来帮助您实现健壮、灵活和可扩展的用户界面。但是在前面的代码清单中,我并没有过多利用这种功能。然而,Facelets 为 JSF 带来的众多微小改进之一便是能够将 JSF 值表达式直接放入到 XHTML 页面;例如,在  中,我将 #{msgs.city} 等表达式直接放入页面中。如果使用 JSF 1,则必须将表达式封装到 <hutputText> 中,例如 <hutputText value="#{msgs.city}"/>。但要注意,出于安全考虑,必须始终将来自用户输入的文本进行转义,例如,在  中我使用了 <hutputText>,它在默认情况下转义其文本来显示位置信息。
从 Facelets 角度来讲,还需要注意  中的 <ui:composition> 标记。该标记指定清单 3 中的 XHTML 页面将被包含到其他 XHTML 页面中。Facelets composition 是 Facelets templating 的中心组件,类似于流行的 Apache Tiles 框架。在本文的后续文章中,我将讨论 Facelets 模板并展示如何根据 Composed Method Smalltalk 模式构建您的视图。
目前为止,前面的代码并没有使用 Facelets,与 JSF 1 相比没有出现显著的变化。现在,我将展示更加大的差异。第一个比较大的差异体现在将要为 JSF 2 应用程序编写的 XML 配置的数量方面。
返回列表