2012-11-08 47 views
2

我有一個JSF應用程序,我需要根據頁面的某些參數動態創建幾乎所有的UIComponent。組件被創建並添加到HtmlPanelGrid。我一直在成功創建HtmlLabel,HtmlInputText,UISelectBoolean和HtmlCommandButton。現在我需要創建一個HtmlSelectOneMenu並添加它,並且我很難找到示例來展示如何附加要選擇的項目列表。動態創建HtmlSelectOneMenu - 分配SelectItem列表

選擇列表是這樣的,我在那裏做了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列表綁定到cfaMenu的ValueExpression,但是找不到任何示例是一個問題。我認爲我需要做這樣的事情

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

但我不認爲這是正確的。有什麼建議麼?

回答

2

您需要創建一個UISelectItems實例與給定的選擇項數組的值,然後將其添加爲菜單的孩子,完全按照你的觀點側<f:selectItems>做。

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

謝謝 - 這是我需要的缺失步驟。 –