2011-12-14 72 views
1

這裏的輸入分量的值綁定到一個列表項是一個例子:由索引

<h:outputLabel for="category1" value="Cateogry"/> 
<h:selectOneMenu id ="category1" value="#{articleManageBean.categoryId1}" 
    converter="categoryConverter"> 

    <f:selectItems value="#{articleManageBean.categories}" var="category" 
     itemValue="#{category.id}" itemLabel="#{category.name}" /> 

</h:selectOneMenu> 

和這裏是託管bean我有

@ManagedBean 
@SessionScoped 
public class ArticleManageBean { 

    private Long categoryId1; 
    private List<Category> categories; 

    //... 
} 

類別列表被從填充db和selectOneMenu使用轉換器填充此列表。

我的第一個問題: 如果我想在我的JSF頁面創建另一個selectOneMenu用於我會複製粘貼整個事情,只是改變selectOneMenu用於價值說categoryId2從而使他人屬性稱爲categoryId2託管bean。這是不實際的。我想selectMenu的這些值映射到列表項,例如一個屬性

List<Long> categoryIds; 

如果我使用

<h:selectOneMenu id ="category1" value="#{articleManageBean.categoryIds.[0]}" > 

我得到一個錯誤

javax.el.PropertyNotFoundException: /createArticle.xhtml @47,68 value="#{articleManageBean.categoriesId[0]}": Target Unreachable, 'null' returned null 

如果我nitialize的Araylist那麼我得到這個異常

javax.el.PropertyNotFoundException: /createArticle.xhtml @47,68 value="#{articleManageBean.categoriesId[0]}": null 

我的第二個問題: 有沒有辦法編寫selectOneMenu標籤,我的意思是不要複製粘貼整個標籤,只是以某種方式創建一個採用categoryId參數並自動寫入標籤的函數(某種自定義標籤可能? )

希望你明白我的問題提前

回答

4

感謝使用括號符號,而不是指定的索引。

<h:selectOneMenu id="category1" value="#{articleManageBean.categoryIds[0]}"> 

你只需要確保你已準備好值後面#{articleManageBean.categoryIds}。 JSF不會爲你做到這一點。例如。

private List<Long> categoryIds = new ArrayList<Long>(); 

public ArticleManageBean() { 
    categoryIds.add(null); 
    categoryIds.add(null); 
    categoryIds.add(null); 
    // So, now there are 3 items preserved. 
} 

另一種方法是使用Long[]代替,這不需要預先填充。

private Long[] categoryIds = new Long[3]; // So, now there are 3 items preserved. 
+0

如果使用的是我得到一個異常 javax.el.PropertyNotFoundException:/createArticle.xhtml @ 47,68值= 「#{articleManageBean.categoriesId [0]}」:目標不可達, '空' 返回null – hari 2011-12-14 02:56:05