jsf-2 - 动态创建 HtmlSelectOneMenu - 分配 SelectItem 列表

标签 jsf-2

我有一个 JSF 应用程序,我需要根据页面的某些参数动态创建几乎所有 UIComponent。创建组件并将其添加到 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);

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

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

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

最佳答案

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

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

关于jsf-2 - 动态创建 HtmlSelectOneMenu - 分配 SelectItem 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293779/

相关文章:

jsf - 表单未提交

jsf-2 - 无法覆盖验证错误消息

jsf-2 - 禁用 primefaces 日历中的日期选择器

mysql - Spring JDBC 模板 - 如何通过单个查询检索具有多个参数的多个结果

java - JSF 2.0 - 更改组件样式

java - 如何在 primefaces webapp 中设置字符集?

java - primefaces 时间表 : edit event details on move/resize event listeners

JSF - 获取url参数并选择页面 - Servlet?

java - 如何将动态创建的 HtmlInputText 组件的值绑定(bind)到 bean 属性?

jsf-2 - ui 内的 Primefaces ManyCheckbox :repeat calls setter method only for last loop