练习 2.4:动态填充组合框
要使用户尽可能容易地使用搜索,应防止用户出错并简化用户可能需要作出的决定。在此练习中,将学习如何通过将 State 输入字段替换为组合框来使搜索页面易于使用。此组合框只列示至少由数据库中的一个客户记录代表的那些州,从而使用户不必猜测要使用哪个州。
将代码添加至库
- 打开 CustomerLib.egl。
- 将以下代码添加至文件中最后一个 end 语句的前面:
function getAllCustomerStates(Customers Customer[])
get Customers with
#sql{
select STATE
from EGL.CUSTOMER
group by STATE
};
end
以下是一些有关刚才添加的 getAllCustomerStates 函数的技术说明:
- 此函数用 getAllCustomers 函数所用的方式访问数据库中的客户记录。主要差别是
getAllCustomerStates 函数只选择 STATE 字段而不是 Customer 表中的每个字段。
- group by STATE 行按州对结果进行分组,因此结果中每个州只列示一次。
- 保存文件。
- 通过按 Ctrl+G 或通过右键单击文件然后从弹出菜单中单击生成来为库文件生成 Java 文件。
- 关闭该文件。
将代码添加至 PageHandler
- 返回到 customersearch.jsp 页面。
- 右键单击 customersearch.jsp 页面,然后从弹出菜单中单击编辑页代码。
- 在 customersearch.egl 文件中,找到以 andOr char(3); 开头的代码行并在它下面添加一个空白行。
- 在添加的新空白行上,插入下面一行代码:
customerStates Customer[];
- 找到以 Function onPageLoad() 开头的代码行并在它下面添加一个空白行。
- 在刚才在 Function onPageLoad() 这一行下面添加的新空白行中,插入下面一行代码:
CustomerLib.getAllCustomerStates(customerStates);
customersearch.egl 文件看起来应如下所示:

以下是一些有关刚才添加的代码的技术说明:
- customerStates 数组存放至少由数据库中的一个客户代表的州列表。
- 添加至 onPageLoad 函数的代码行将
customerStates 数组发送至库中的 getAllCustomerStates 函数,并用州列表填充该数组。
- 保存并关闭该文件。
将组合框添加至页面
添加动态填充的组合框比添加具有预定义值的 JSF 控件(如在前一个练习中添加的单选按钮组)复杂一些。此组合框必须绑定至两段 EGL 数据:
- customerStates 数组,它提供了组合框的选项列表。
- searchTerms.State 变量,它存放组合框中用户选择的内容。
- 返回到 customersearch.jsp 页面。
- 单击 STATE 输入字段,然后按 Delete 键。
- 在删除输入字段的位置,添加来自“选用板”视图的“Faces 组件”抽屉中的组合框。
- 在“页数据”视图中,展开 customersearch > customerStates - Customer[]。
- 在“页数据”视图中的 customerStates - Customer[] 下面,将 state - STATE 拖到组合框上。
- 单击组合框以选择它。
- 打开“属性”视图。
- 在“属性”视图中值字段的旁边,单击选择页数据对象
按钮。将打开“选择页数据对象”窗口。
- 在“选择页数据对象”窗口中,展开 customersearch > searchTerms - Customer。
- 在 searchTerms - Customer 下面,单击 state - STATE。
“选择页数据对象”窗口看起来应如下所示:

- 单击确定。
- 保存该页面。
- 测试该页面。
现在,您可以开始进行练习 2.5:定制搜索结果了。