您可以将下拉列表组件
从组件面板拖到可视设计器中以创建一个下拉列表(或组合框),用户可以单击下拉按钮并从列表中选择项。
下拉列表是最初作为单个项显示的项列表,单击后将变成包含多个项的列表。每次只能选择一个下拉项。下拉列表与 Java Swing 和 Microsoft Windows 中的组合框相似,它们在 HTML 中称为选择列表。
您可以设置 items 属性将组件与填充列表的数据库表或数组、com.sun.webui.jsf.model.Option 对象的 java.util.Collection 或 java.util.Map 关联起来。可以通过右键单击组件并选择“绑定到数据”来设置该属性。在中,可以看到用于填充列表的缺省对象,该对象的名称类似于 dropDown1DefaultOptions。有关此属性的缺省设置的信息,请参见本主题后面的下拉项的缺省显示。
可以使用 selected 属性将组件与表示当前选项的模型对象相关联。为此,请设置与受管 Bean 属性对应的表达式的值。可以右键单击组件,然后选择“属性绑定”以在“属性绑定”对话框中绑定 selected 属性。
第一次呈现组件时,与 selected 模型对象属性值对应的选项将被标记为选中状态(通过使用模型对象中的 equals 方法)。
可以对组件执行以下操作:
Option 对象以外,还可以指定 OptionGroup 对象以创建单独的选项组。label 属性。
label 属性不像标签组件那样灵活。如果要对标签的外观进行更多控制(如相对于组件定位标签),则可以使用标签组件。validate 方法上,以便插入代码来验证组件的值。processValueChange 方法上,以便插入在该组件的值发生更改时执行的代码。如果您已经从组件的弹出式菜单中选择了“更改时自动提交”,则会执行此方法,以在组件的值发生更改时提交页面。当组件是虚拟表单的一部分时,此技术非常有用。common_timeoutSubmitForm(this.form, 'component-id');。在运行时,如果用户更改了组件值,该代码将导致自动提交表单。在提交表单后,将在服务器上进行转换和验证,执行任何值更改侦听程序方法,然后重新显示页面。
如果您具有提交页面时要执行的代码,请将其置于上述 processValueChange 方法中。
配置为“更改时自动提交”的组件可以使用虚拟表单来限制在提交表单时处理的输入字段。如果定义了自动提交组件来提交虚拟表单,则在进行自动提交时,将只处理该虚拟表单中的参与者。
items 属性绑定到对象或数据提供器,如“绑定到数据”对话框中所述。
items 属性绑定到对象,请选择“绑定到对象”标签,然后选择一个将用于填充列表的 Bean 属性。Bean 属性必须为 Object 数组、映射或集合,其成员是 com.sun.webui.jsf.model.Option 的所有子类。
items 属性绑定到用于填充列表的数据库表的数据提供器,请选择“绑定到数据提供器”标签,然后选择一个已添加到页面上的数据库表的数据提供器。dropDown#DefaultOptions 对象并更改列表项的显示和值,以及选取在下拉列表首次显示时缺省选择的项。但是,您可能会将 items 属性绑定到用于设置列表项的数据库或对象上,如上面的“绑定到数据”中所述。selected 属性是一个常见的绑定属性,可以将该属性绑定到 Object 数组、基元数组或 ArrayList。您必须已将数组作为属性添加到受管 Bean(如会话 Bean)中。您可以使用此 Bean 属性来计算用户提交页面后选择的值。缺省情况下,下拉列表使用类型为 SingleSelectOptionsList 且名称基于缺省组件 ID 的对象来显示其列表项。例如,在页面上放置的第一个下拉列表最初命名为 dropDown1,且具有与其关联的 dropDown1DefaultOptions 数组对象,您可以在中看到该对象。
可以使用以下方法来设置此数组对象的值:右键单击下拉列表组件,然后选择“配置缺省选项”以打开“选项定制器”对话框。在此对话框中,可以添加新的项或删除现有的项;可以为每一项设置显示的值 (Display) 和项值 (Value);并且还可以选择缺省情况下显示的项 (Selected)。dropDown#DefaultOptions 对象是一个数组,该数组在 label 字段中存储其 Display 值,并在 value 字段中存储其 Value 值。
以下代码样例说明了如何使用此对象和下拉列表的 select 属性来确定当前选择的项,然后将其 Display 和 Value 值(即 label 和 value)写入两个静态文本字段中以进行显示。如果将下拉列表和两个静态文本组件添加到页面中,然后按照上述说明将此代码置于下拉列表的 processValueChange 方法中并为组件选择“更改时自动提交”,当用户选择此列表中的某一项时,将在两个静态文本字段中显示其 Display 和 Value 值。
String myvalue = (String)dropDown1.getSelected();
int numOptions = dropDown1DefaultOptions.getOptions().length;
int i = 0;
for (i = 0; i < numOptions; i++) {
if (myvalue.equals(dropDown1DefaultOptions.getOptions()[i].getValue()))
break;
}
if (i < numOptions) {
staticText1.setText(dropDown1DefaultOptions.getOptions()[i].getLabel());
staticText2.setText(dropDown1DefaultOptions.getOptions()[i].getValue());
} else {
staticText1.setText("not found"); // should not get here
}