| 在本教程中,您将使用 Sun Java Studio Creator 集成开发环境 (integrated development environment, IDE) 创建并部署一个使用 Enterprise JavaBeans 组件的应用程序。Enterprise JavaBeans 组件是用 Java 编程语言编写的服务器端组件,用于封装应用程序的业务逻辑。业务逻辑是指用于实现应用程序目的的代码。在本教程中生成的应用程序使用 TravelEJB(IDE 提供的预装样例之一)访问数据库中的信息。
|
|
目录
|
![[spacer]](/im/a.gif) |
 |
创建包括一个下拉列表组件的页
在本教程中,您将生成一个 Travel Center 应用程序,如下图所示。
图 1:Travel Center Web 应用程序 |
首先,将一个下拉列表组件添加到应用程序的起始页。
- 创建一个新的 JavaServer Faces (JSF) Web 应用程序项目,并将其命名为
EJBExample。
IDE 创建名为 Page1 的缺省起始页,并在可视设计器中显示该页。
- 将一个“下拉列表”组件从组件面板的“基本”类别拖放到该页的左上角。
- 在“属性”窗口中,将其 id 更改为
nameDropDown。
- 右键单击“下拉列表”组件,然后选择“更改时自动提交”。
“更改时自动提交”功能可确保用户重新从下拉列表中选择时,应用程序会重新提交和更新页。
- 将一个“消息组”组件从组件面板的“基本”类别拖放到页的左下角。
此组件对于诊断编程错误是很有用的。通过调用 error(String) 方法,可以使诊断消息出现在此组件中。消息组组件显示 String 参数的值。除此之外,有关运行时错误、验证错误和转换错误的消息在缺省情况下会出现在此组件中。
添加一个 EJB 组件并将下拉列表绑定到数据提供器
接下来,将一个 EJB 组件添加到页,并将下拉列表绑定到 getPersons 方法。应用程序部署好之后,下拉列表会显示旅行者的名字列表。
- 打开“服务器”窗口,然后展开 "Enterprise Java Beans" > "Travel Center" > "TravelEJB",如图 2 所示。
图 2:“服务器”窗口 |
- 将
getPersons 方法从“服务器”窗口拖放到“下拉列表”上。
下拉列表中的值将从 item 1 更改为 abc。文本 "abc" 指示显示字段已绑定到 String 对象(在本例中,此对象为返回的 Bean 类的 name 属性)。
travelGetPersons1 和 travelClient1 将出现在“概要”窗口中。travelClient1 是 TravelEJB 的客户端实例,而 travelGetPersons1 是 getPersons 方法的数据提供器。
- 右键单击下拉列表,然后选择“绑定到数据”。
将打开“绑定到数据”对话框。
- 在“绑定到数据提供器”标签中,设置以下三个值,如图 3 所示。
下拉列表:travelGetPersons1 (Page 1) 值字段:personId 显示字段:name
图 3:“绑定到数据”对话框
|
- 单击“确定”。
测试下拉列表
- 打开“服务器”窗口,并确保捆绑的数据库服务器正在运行。
如果服务器正在运行,则“Bundled Database 服务器”节点的左侧会出现一个绿色状态图标。如果捆绑的数据库服务器没有运行,请右键单击“Bundled Database 服务器”节点,然后从弹出式菜单中选择“启动 Bundled Database”。
- 运行应用程序,并验证下拉列表是否显示名字的列表。
添加一个表并将其绑定到数据提供器
接下来,将一个表添加到页面,并将其绑定到 TravelEJB 的 getTripsByPerson 方法。应用程序部署好之后,该表会显示数据库中的主要-详细数据。当您从下拉列表中选择一个人时,应用程序会在下面的表中显示这个人的旅行记录。
- 将一个“表”组件从组件面板的“基本”类别拖放到可视设计器中下拉列表的下方。
在运行的应用程序中,表显示所选旅行者的行程。图 4 显示了页面布局和在后续步骤中设计的表。
图 4:包括表组件的页面设计 |
- 在“服务器”窗口中,将
getTripsByPerson 方法拖放到可视设计器中的“表”上。
数据提供器中的值字段将显示为表中的列名。
- 右键单击表头,然后从弹出式菜单中选择“表布局”。
- 在“表布局”对话框中,将 tripid 和 personid 从“选定”列表移动到“可用”列表,方法是选择每一项后单击 < 按钮。
- 将 depDate 移动到“选定”列表的顶部,方法是选择后单击“上移”按钮。
- 将 depDate 的标题文本更改为
Departure Date。
请注意,可以将一个转换器拖放到表中的 depDate 列上,并将其设置为仅显示日期。有关详细信息,请参见使用转换器教程。
图 5 显示了“表布局”对话框,其中包括到目前为止所做的更改。
图 5:“表布局”对话框 |
- 选择 depCity,并将其标题文本更改为
Departure City。
- 选择 destCity,并将其标题文本更改为
Destination City。
- 选择 tripType,并将其标题文本更改为
Trip Type。
- 单击“选项”标签,并将标题更改为
Trips。
- 单击“确定”应用更改并关闭“表布局”对话框。
根据下拉列表填充表
- 在可视设计器中,双击“下拉列表”。
将打开 Java 编辑器,插入点位于 nameDropDown_processValueChange 方法中。
- 打开组件面板的“代码片段”标签,并滚动到 Enterprise Java Beans 节点。
图 6 显示了 Enterprise Java Beans 节点及其三个代码片段(在下面的步骤中将它们添加到您的代码)。
图 6: Enterprise Java Beans |
- 将“DropDown 进程值更改”从组件面板的“代码片段”标签拖放到
nameDropDown_processValueChange 方法中。
此代码片段用于从下拉列表获取所选的用户 ID,然后将该 ID 设置为表的数据提供器。
- 将“获取第一个用户 ID”代码片段从组件面板拖放到 Java 编辑器中,使其紧邻最后一个花括号之前。请注意,包括
Rowkey 类的语句包含一个语法错误,因为文件尚未包括该类的 import 语句。将在下一步中添加 import 语句。
“获取第一个用户 ID”代码用于从 travelGetPerson1 数据提供器获取第一个用户的 ID。
- 在 Java 编辑器中的任意位置单击鼠标右键,然后选择“修复导入”。
“修复导入”命令会自动添加代码所需的 import 语句,并删除未使用的 import 语句。“修复导入”命令不删除代码中可能包含的任何全限定类名称。
- 向上滚动到
init 方法,然后将“选择第一个用户”从组件面板的“代码片段”拖放到注释语句 Creator 管理的组件初始化之后。按 Control-Shift-F 组合键自动重新设置代码格式。结果类似于以下代码样例。“选择第一个用户”代码以粗体显示。
代码样例 1:包含“选择第一个用户”代码的 init 方法 |
public void init() {
// Perform initializations inherited from our superclass
super.init();
// Perform application initialization that must complete
// *before* managed components are initialized
// TODO - add your own initialiation code here
/Creator-managed Component Initialization/
// Perform application initialization that must complete
// *after* managed components are initialized
// TODO - add your own initialization code here
// Initialize the drop down to select the first person
// and the data provider to get the trips for the first person
Integer firstPerson = getFirstPersonId();
nameDropDown.setSelected( firstPerson );
travelGetTripsByPerson1.setPersonId( firstPerson );
}
|
此代码片段使用 travelGetPeople1 数据提供器中的第一个名字初始化下拉列表。该代码还从 travelGetTripsByPerson1 数据提供器中检索第一个用户的行程。当选择其他用户时,Trips 表的内容也会随之改变。
运行项目
- 运行项目。
- 从下拉列表中选择一个名字,您会注意到数据表被更新。图 7 显示了 John Black 的旅行路线。
图 7:最终的 Web 应用程序 |
另请参见:
此页的最新修改时间:2006 年 1 月 25 日
|