【问题标题】:Create and add f:selectItems to HtmlSelectOneRadio programmatically以编程方式创建 f:selectItems 并将其添加到 HtmlSelectOneRadio
【发布时间】:2012-09-17 17:20:15
【问题描述】:

我正在使用 JSF 创建问卷,因此我需要务实地创建我的整个 xhtml,因为有不同类型的问题并且它们的数量没有预定义。

我的视图中只有一个 h:panelGrid,其余部分在我的支持 bean 中生成。

创建 HtmlOutputText 和 HtmlInputText 没有问题。为此,我使用 getApplication 创建它们,例如像这样:

getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);

然后像这样将组件添加到我的网格中:

grid.getChildren().add(questionnumber);

“grid”是我的 panelGrid 元素。 所以我把我的问题放在一个循环中,并根据数据库中的问题类型决定要创建什么类型的组件。如果问题是普通文本问题,我可以轻松使用 HtmlInputText。但我也有多项选择题。因此我需要创建 SelectOneRadio 菜单并在其中添加 SelectItems。

我可以使用上面提到的相同 createComponent 方法创建一个HtmlSelectOneRadio。但我无法为其添加选项(选择项组件)。有没有办法我可以做到这一点?我们是否有我缺少的 UIComponent?

【问题讨论】:

    标签: jsf facelets dynamic-forms


    【解决方案1】:

    我自己找到了解决方案。我必须使用 UISelectItems 并将其添加到我的 SelectOneMenu 中,如下所示:

    final UISelectItem select = (UISelectItem) getApplication().createComponent(UISelectItem.COMPONENT_TYPE);
    List<SelectItem> items = new ArrayList<SelectItem>();
    for (int k = 0; k < options.length; k++){
    items.add(new SelectItem(options[k]));                
    }
    UISelectItems selectItems = new UISelectItems();
    selectItems.setValue(items);
    selectOneRadio.getChildren().add(selectItems);
     grid.getChildren().add(selectOneRadio);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      相关资源
      最近更新 更多