2

我有一个 JSF 应用程序,我需要根据页面的某些参数动态创建几乎所有 UIComponents。组件被创建并添加到 HtmlPanelGrid。我已经成功地创建了 HtmlLabel、HtmlInputText、UISelectBoolean 和 HtmlCommandButton。现在我需要创建一个 HtmlSelectOneMenu 并添加它,我很难找到显示如何附加要选择的项目列表的示例。

选择列表是这样的,我将 cfaItems 设置为我的支持 bean 的属性:

SelectItem[] cfaItems = {
    new SelectItem(1, "1"),
    new SelectItem(2, "2"),
    new SelectItem(3, "3"),
    new SelectItem(4, "4"),
    new SelectItem(5, "5")
};

HtmlSelectOneMenu 的创建:

    HtmlSelectOneMenu cfaMenu = (HtmlSelectOneMenu)
        getApplication().createComponent(HtmlSelectOneMenu.COMPONENT_TYPE);
    cfaMenu.setId("cfaMenu");
    grid.getChildren().add(cfaMenu);

尽我所能,我需要创建一个 ValueExpression 将 cfaItems 列表绑定到 cfaMenu 但找不到任何示例是一个问题。我认为我需要做这样的事情

    String menuBinding =
        "#{" + beanName + ".cfaItems}";
    ValueExpression menuVE = getApplication().getExpressionFactory().
        createValueExpression(FacesContext.getCurrentInstance().
        getELContext(), menuBinding, String.class);
    cfaMenu.setValueExpression("value", menuVE);

但我不认为这是正确的。有什么建议么?

4

1 回答 1

2

您需要UISelectItems使用给定的选择项数组作为值创建一个实例,然后将其添加为菜单的子项,就像您<f:selectItems>在视图端所做的那样。

UISelectItems selectItems = new UISelectItems();
selectItems.setValue(cfaItems);
cfaMenu.getChildren().add(selectItems);
于 2012-11-08T17:21:16.663 回答