【问题标题】:Creating HtmlSelectOneMenu dynamically - assigning SelectItem list动态创建 HtmlSelectOneMenu - 分配 SelectItem 列表
【发布时间】:2012-11-08 16:53:46
【问题描述】:

我有一个 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);

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

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

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

    UISelectItems selectItems = new UISelectItems();
    selectItems.setValue(cfaItems);
    cfaMenu.getChildren().add(selectItems);
    

    【讨论】:

    • 谢谢 - 这是我需要的缺失步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多