跳至内容 Java Solaris 社区 Sun 商店 加入 SDN 我的个人档案 加入的益处
 
在 Sun Java Studio Creator 2 中安装并使用 BluePrints 样例 AJAX 组件
 
作者:Steve FlemingBeth Stearns,2006 年 4 月  
本文介绍了 Java BluePrints 样例 AJAX 组件(您可能会在别处看到它被写为 "Ajax")。可以通过 Sun Java Studio Creator 2 IDE 和 Sun Java Studio Creator 2 Update 1 IDE 的自动更新来获取这些组件。有关 AJAX 以及它如何与 Java Studio Creator 配合使用的一般概述,请参见 AJAX 和 Java Studio Creator 一文。您还可以阅读在 JavaOne 2005 主旨(星期一上午)演说中展示的 AJAX 样例组件的详细教程。本文通过下面描述的一系列样例来说明该教程中的样例组件的新版本。
 
目录
 
BluePrints AJAX 组件概述
“试用”AJAX
创建样例应用程序
其他 BluePrints AJAX 组件
了解有关 Java BluePrints 组件的详细信息
 

请注意,这些 Java BluePrints 组件是随 IDE 一起提供的,它们可以帮助您了解 AJAX 并演示 AJAX 是如何与 Java Studio Creator 2 完美结合的。通过这些样例组件,您可以了解在将 AJAX 与 JavaServer Faces 配合使用时可能会带来哪些好处。请注意,这些组件可能会随着我们对您的建设性的反馈意见作出回应而发生变化。

BluePrints AJAX 组件概述
 

样例 Java BluePrints AJAX 组件更新包含以下组件:

  • Auto-Complete Text Field(自动完成文本字段)

  • Progress Bar(进度栏)

  • Map Viewer(地图查看器)

  • Select Value Text Field(选择值文本字段)
最新的更新(2006 年 4 月发行)添加了以下三个样例组件:
  • Rich Textarea Editor(功能丰富的文本区域编辑器)

  • Buy Now Button(立即购买按钮)

  • Rating(评级)
版本 3 发行版本包含以下额外的样例组件:
  • Pop-up Calendar(弹出式日历)

自动完成文本字段:在用户键入内容时,使用 AJAX 请求来提供可单击的建议列表。
 
图 1:自动完成文本字段
图 1:自动完成文本字段
 

进度栏
:使用 AJAX 请求为运行时间较长的操作更新进度显示。
 
图 2:进度栏
图 2:进度栏
 


地图查看器:通过 AJAX 对 Google 地图 API 的调用请求来显示地图,您可以平移、缩放和显示不同的视图以及为地图添加气球标记。
 

图 3:地图查看器
图 3:地图查看器
 


选择值文本字段:与自动完成文本字段类似,但它可以在下拉组件中显示建议的列表。
图像 1 是用户键入内容时的显示;而图像 2 是用户与下拉列表进行交互时的显示。
 

图 4:选择值文本字段
图 4:选择值文本字段
 

功能丰富的文本区域编辑器:
是一个包含工具栏的文本区域,用户可以使用该工具栏来应用与文字处理应用程序类似的格式(如粗体、斜体、项目符号等)。目前,最好将功能丰富的文本区域编辑器样例组件与 Firefox 配合使用,因为在 Internet Explorer 和 Safari 浏览器中无法正确显示其工具栏。
图 5:功能丰富的文本区域组件
图 5:功能丰富的文本区域组件
 
立即购买按钮:该按钮会启动单一订购 PayPal 交易并将付款信息发送到 PayPal Web 站点。
图 6:立即购买按钮
图 6:立即购买按钮
 
评级:是由一行星形符号组成,用于评定某一项的优劣级别。当用户为某一项评定了新的级别时,AJAX 请求会将该级别发送到服务器。
图 7:评级组件
图 7:评级组件
 
弹出式日历:提供一个弹出式日历,您可以从中选择日期。该组件允许用户输入日期,或者打开一个弹出式日历,您从中选择日期。
图 8:弹出式日历组件   图 8:弹出式日历组件
图 8a:弹出式日历组件
图 8b:浏览器中的弹出式日历
 
“试用”AJAX
 

让我们快速“试用”一下这些组件。

安装

可以从 Java Studio Creator 更新中心来下载 BluePrints 样例 AJAX 组件。要启动更新中心向导,请首先启动 Java Studio Creator IDE,然后从主菜单栏的“工具”菜单中选择“更新中心”。如果您处于防火墙的保护下,则需要配置代理服务器。为此,请单击位于向导面板中间的“代理配置”按钮。连接到更新中心后,请按照向导中的说明进行操作,选择包含“BluePrints AJAX 组件”的更新,然后完成其余向导步骤。有关安装样例组件的详细信息,请参见教程下载 AJAX 组件并将其导入到 IDE 中

在完成组件库的自动更新下载后,该组件库将添加到 samples 目录中。如果使用的是 Java Studio Creator 2,该组件库位于 $installDir/ nb4.1/samples/complib 目录中,这是 Java Studio Creator 2 安装目录的一个子目录。如果使用的是 Java Studio Creator 2 Update 1,该组件库位于 $installDir/samples 目录中(要查看正在运行的 IDE 版本,请从“帮助”下拉菜单中,单击“关于 Java Studio Creator”)。

要将该组件添加到组件面板中,请使用以下步骤将 complib 文件导入到 Java Studio Creator IDE 中:

1. 如果需要,请从菜单栏的“视图”菜单中选择“组件面板”以显示组件面板。或者,如果显示的是“代码片段”,请单击“组件面板”窗口底部的“组件”标签。

2. 将鼠标放在任何组件面板类别的名称(如“基本”)上,单击鼠标右键以显示上下文菜单。从上下文菜单中选择“管理组件库”。

3. 将弹出“组件库管理器”对话框。单击对话框左下角的“导入”按钮。

4. 将打开“导入组件库”对话框。请单击“浏览”按钮,并根据 IDE 的版本导航到 IDE 安装目录中的 nb4.1/samples/complib 文件夹或 samples 文件夹。选择 ui.complib 文件,然后在后续对话框中单击“确定”。下图显示了一个对话框屏幕示例,在选择 complib 文件后将显示该屏幕。

 

图 9:导入对话框
图 9:导入对话框
 

导入组件库后,您会在组件面板底部看到两个新类别。

创建试验性的 Web 应用程序

首先,让我们创建一个包含评级组件的小应用程序,并在启用 HTTP 监视的情况下运行它(注意:2006 年 1 月开始提供的样例组件中不包含该组件。如果在组件面板上看不到评级组件,则需要重新更新。或者,如果愿意,请跳至下一类别)。要测试评级组件,请按照以下说明进行操作:

1. 创建一个新的 Web 应用程序。

2. 在组件面板的 "BluePrints AJAX Components" 类别(是在导入 complib 后添加到组件面板中的两个新类别之一)中找到 "Rating" 组件,将一个评级组件添加到 Web 页上。

3. 打开作为调试工具的 HTTP 监视器。(要完成此项操作,请右键单击“服务器”窗口中的“部署服务器”节点,然后打开其属性表单。将“启用 HTTP 监视器”属性设置为 true。在进行此更改或显式打开监视器后,您无需重新启动服务器;HTTP 监视器会在您返回到 IDE 后自动出现)。要获取有关设置 HTTP 监视器的帮助,请从“帮助”下拉菜单中打开“帮助内容”,然后搜索“HTTP 监视器”。

4. 将名为 stars 且类型为 int 的属性添加到应用程序 Bean 中。在设计器中,选择 Web 页上的评级组件,然后单击其 grade 属性的 ... 按钮。将 grade 绑定到在应用程序 Bean 上创建的 stars 属性。

5. 单击绿色箭头工具栏按钮以生成、部署项目并在浏览器中执行该项目。您会看到该评级组件的显示信息,如下所示。在浏览器中单击评级组件时,可以查看 HTTP 监视器的操作情况。要查看 HTTP 监视器,请将浏览器窗口缩小并将其放在显示区域的左侧。然后将 IDE 窗口移到浏览器的右侧。

图 10:浏览器中的评级组件
图 10:浏览器中的评级组件
 

6. 返回到 IDE 并检查 HTTP 监视器。现在,在浏览器中选择不同的星号评级。请注意,在每次单击某个星号评级时,即使未提交浏览器的页面,服务器也会收到新的 HTTP 请求。这是由于 AJAX 在发挥作用。在 IDE 的 HTTP 监视器中选择某个请求。请注意,发送到服务器的请求参数 grade 值与在浏览器中选择的星号数量相对应。

7. 由于不再需要 HTTP 监视器,因此可以将其关闭(如果愿意)。

除了在不提交页面的情况下将数据发送到服务器外,AJAX 还允许将数据从服务器返回到浏览器,并且只更新页面的一部分,而无需重新显示整个页面。接下来,我们将会看到这种情况。

创建样例应用程序
 

让我们通过构建一个样例应用程序来了解 AJAX 和 Creator 的更多内容。如果在构建过程中出现任何问题,请在论坛上给我们留言。

1. 如果尚未执行安装,请按上述操作执行安装。

2. 创建一个新项目。我们将创建一个小型应用程序,以自动完成 JumpStart Cycles 样例应用程序部件数据库表中某个部件的名称。我们只是在制作原型,因此并不是真的将该程序与 JumpStart 应用程序集成在一起。

3. 将一个 "Auto-Complete Text Field" 组件拖放到“设计”窗口上。自动完成文本字段的工作方式在很大程度上类似于 Google Suggest 中的 AJAX 功能(如 AJAX 和 Java Studio Creator 一文所述)。在“设计”窗口中,自动完成组件看起来就像常规的文本字段一样。但是,如果查看“属性”窗口,您就会看到一些重要的差异。特别是,自动完成组件在“事件”类别中具有一个名为 completionMethod 的属性。我们接下来将使用它。

4. 自动完成组件具有一个关联的 AJAX 请求,用于请求建议项列表。我们将选择编写自己的 AJAX 事件处理程序代码(有关此问题的一般论述,请参见 AJAX 和 Java Studio Creator 一文)。请双击添加到“设计”窗口中的自动完成组件,视图将切换到 Java 源代码中,并定位到与 AJAX 事件处理程序相对应的新增方法上,这与编写非 AJAX 事件处理程序相似。

5. 您将看到新方法的一些重要注释和参数。prefix 参数对应于浏览器的自动完成文本字段中用户输入的字符串。result 参数用于返回建议项列表。该结果列表在响应 AJAX 请求时被发回到浏览器中。为了简单起见,让我们从两个包含 result.addItem... 的行中删除注释标记 (即,删除位于行首的 //)。

6. 单击绿色箭头以生成、部署该应用程序并在浏览器中执行它。

7. 现在,在浏览器中单击该文本输入字段以通过鼠标来设置焦点。您将看到如下内容:
 

图 11:输入焦点的结果
图 11:输入焦点的结果
 

下面是将要发生的情况。在用户不仅按下某键而且组件收到输入焦点时,该组件就实现了 AJAX 请求。因此,代码的 AJAX 事件处理程序在忽略 prefix 的值的情况下,在结果中添加了 "Hello"。

8. 为了对所有的软件开发者表示尊重,请在输入字段中键入字符串 "world"。可以看到该列表将基于您所键入的内容不断地发生改变。事件处理程序中的第二个 addItem 仅回显已转换为大写形式的 prefix 输入参数,如下所示。
 
图 12:键盘输入的结果
图 12:键盘输入的结果
 

正如您所看到的那样,IDE 和 AJAX 可以很好地结合在一起。如果需要进一步证实这一点,可以按照下面的路线图,改进 AJAX Web 应用程序以自动完成数据库表中的部件名称。目前,AJAX 可以改进用户界面,但前提是它可以快速运行。如果您需要提高速度,请参阅这里。由于这是一个样例应用程序,因此该路线图介绍了使用嵌入式数据库的步骤。但是,您可以根据所选的数据库随意地更改这些步骤。

返回数据库查询结果的 AJAX 事件处理程序的高级路线图

此路线图显示了一系列的开发阶段,其中每个阶段都会为您的样例应用程序添加一些新内容。要充分利用此路线图,请通过迭代方式分阶段改进样例应用程序。与此相关的一个很好的教程是:使用数据绑定组件访问数据库

开发阶段 I:在 AJAX 事件处理程序中执行查询

  1. 请确保绑定的数据库服务器正在运行。或者,设置所选的数据库

  2. 从“服务器”窗口将位于 "JumpStart Cycles" 下方的 "Part" 表拖放到“设计”窗口的 Web 页上。

  3. 编辑查询以便返回以字母 'B' 开头的所有部件名称。通过在查询编辑器中运行已编辑的查询,对其进行测试。有关如何编辑查询的提示,请参见在此路线图结尾处使用的第一个样例查询

  4. 在 AJAX 事件处理程序中,添加代码以执行查询。有关提示,请参见下面的样例代码,它显示了最终的版本。

  5. 此时,让我们先保留将 "Hello" 和 "prefix" 添加到结果列表中的代码行。放入代码以在 "Hello" 和 "prefix" 两行之间执行查询。要进行调试,请添加代码以捕获 SQLException,并且使 catch 块中的代码如下所示:result.AddItem(e.toString()),其中 e 是捕获的异常的标识符。

  6. 生成、部署并测试第一次迭代的样例应用程序。在这一部分,我们将验证查询没有抛出任何异常。接下来,我们将发回查询数据。

开发阶段 II:将来自查询的数据拖放到结果中

  1. 在这里,我们需要使用查询返回的数据,并将其添加到结果对象中。我们将使用与查询行集关联的数据提供器来获取数据。为了简便起见,您可以将查询调整为只返回所需的列。对于此样例应用程序,我们仅需要查询返回部件的名称。如果您需要相关提示,请参见下面的代码

  2. 生成、部署并测试新迭代的样例应用程序。

开发阶段 III:将查询调整为使用来自 AJAX 请求的 prefix 参数

  1. 更改查询以使其成为参数化查询。即,在查询编辑器中,更改查询以便 PART.NAME 列接受参数。

  2. 改进 Java 代码以设置查询参数的值。建议从使用字母 'B' 开始。有关提示,请参见下面的最终版本 SQL 提示

  3. 生成、部署并测试第三次迭代的样例应用程序中的该部分。

  4. 使用 prefix 属性值更改用于设置查询参数的 Java 代码。

  5. 如果您使用的是绑定的数据库样例表,则可能希望将 prefix 字符串的前导字符转换为大写形式。请参见下面的 prefixLeadingCap 代码

  6. 重新生成、部署并测试应用程序。
样例 SQL 和事件代码

开发阶段 I:SQL 提示:

SELECT ALL JSC.PART.NAME
FROM JSC.PART
WHERE JSC.PART.NAME<> 'Not Configured'
AND JSC.PART.NAME  LIKE  ?


public void autoComplete1_complete(FacesContext context, String prefix, CompletionResult result) {
	// TODO: Return your own list of items here based on the prefix, like this:

	if (prefix == null ||  prefix.length() < 1) {
		return;
	}
	result.addItem("start");
	try {
		String prefixLeadingCap = prefix.substring(0,1).toUpperCase() + prefix.substring(1)
									+ '%';   // phase 3
		result.addItem(prefixLeadingCap);
		// % means match any string starting with prefix, convert to leading
		// caps for better matching

		try {   // phase 1
			CachedRowSetX partRowSet = getSessionBean1().getPartRowSet();   // phase 1
			partRowSet.setObject(1, prefixLeadingCap);   // phase 3, first parameter is 1
			// partRowSet.execute();                  // uncomment for development phase I,
							// later replaced by refresh below

		} catch (SQLException e) {
			result.addItem("Exception: " + e);      // for debugging, otherwise comment out
							// or change for security purposes
			return;
		}
		try {   // phase 2
			partDataProvider.refresh();             // executes the query
			if (!partDataProvider.cursorFirst()) {
				result.addItem("Empty");            // for debugging, comment out otherwise
				return;                             // the query returned no rows
			}
			do {
				String partName = (String) partDataProvider.getValue("PART.NAME");
				result.addItem(partName);
			} while (partDataProvider.cursorNext());
		} catch (DataProviderException e) {
			result.addItem("Exception: " + e);      // for debugging, otherwise comment out
							// or change for security purposes
		}
	} catch (Exception se) {                        // remove this catch after you have
							// finished debugging
		result.addItem("UnknownException: " + se);
	}
	result.addItem("end");

}
 
其他 BluePrints AJAX 组件
 

complib 文件包含了一个地图查看器组件,您可以通过该组件在 Sun Java Studio Creator 2 中开发使用 Google 地图 API 的 Web 应用程序。该文件中还包含了一个选择值文本字段组件,它不仅可以在一般的情况下使用,而且在映射 Web 应用程序方面特别有用。

有关不同的 AJAX 组件(包括地图查看器和进度栏组件)的教程,请参见 Sun Java Creator Studio 学习页

有关 AJAX 组件的其他技术文章和提示,请参见 Sun Java Creator Studio 参考页
 

了解有关 Java BluePrints 组件的详细信息
 

如果您是一位组件开发者并希望了解有关组件的详细信息,则应该查看 Java BluePrints 组件及其相关文档。请访问以下链接以获取详细信息:

Java BluePrints AJAX BluePrints Web 页:
http://java.sun.com/blueprints/ajax.html

Java BluePrints 解决方案目录,特别是其 AJAX 组件:
https://bpcatalog.dev.java.net/nonav/ajax/index.html

https://bpcatalog.dev.java.net/nonav/ajax/jsf-ajax/frames.html

更多的开发者资源

有关为开发者提供的更多技术提示、文章和专家建议,请访问 Sun Developer Network (SDN) 上的 Java Studio Creator 开发者资源,网址为:http://gceclub.sun.com.cn/prodtech/javatools/jscreator/



返回到 Sun Java Studio Creator 开发者资源页面

Steve Fleming 是在旧金山工作的一名软件工程师。自公开发行第一批版本以来,他就一直是 Sun Java Studio Creator 小组的一名成员。Steve 喜欢在旧金山各处游历,并喜欢吃巧克力饼干、阅读 Jonathon 的博客文章以及参加慈善活动
 
Beth Stearns 撰写了许多有关 Java 技术的文章和书籍。最近,她与别人合著了一本有关 J2EE BluePrints 的书《Designing Web Services with the J2EE 1.4 Platform》(使用 J2EE 1.4 平台设计 Web 服务)。