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