我正在使用JSF创建问卷,因此我需要务实地创建我的整个xhtml,因为存在不同类型的问题,并且它们的数量未预定义。
我的视图中只有一个h:panelGrid,其余的是在我的支持bean中生成的。
创建HtmlOutputText和HtmlInputText没问题。为此,我使用getApplication创建它们,例如像这样:
getApplication().createComponent(HtmlOutputText.COMPONENT_TYPE);
然后将组件添加到我的网格中:
grid.getChildren().add(questionnumber);
其中“grid”是我的panelGrid元素。 所以我把问题放在一个循环中,并根据db中的问题类型决定要创建什么类型的组件。如果问题是普通文本问题,我可以轻松使用HtmlInputText。但我也有多项选择题。因此,我需要创建SelectOneRadio菜单并在其中添加SelectItems。
我可以使用上面提到的相同createComponent方法创建HtmlSelectOneRadio
。但是我无法为它添加选项(selectitem组件)。有没有办法可以做到这一点?我是否有一个我缺少的UIComponent?
答案 0 :(得分:3)
我自己找到了解决方案。我不得不使用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);