組件的value
需要指向與itemValue
類型非常相似的數組或List
。假設它是Long
,那麼它需要綁定到Long[]
或List<Long>
。
E.g.
private Long[] selectedEditionIds; // +getter +setter
private List<Edition> availableEditions; // +getter
與
<h:selectManyCheckbox value="#{bean.selectedEditionIds}">
<f:selectItems value="#{bean.availableEditions}" var="edition" itemLabel="#{edition.name}" itemValue="#{edition.id}" />
</h:selectManyCheckbox>
如果你喜歡一個List<Long>
,那麼你應該明確地提供一個轉換器爲Long
類型,因爲泛型類型在運行期間,沒有一個轉換器EL將在設置String
值刪除List
這最終只會導致ClassCaseException
s。因此這樣:
private List<Long> selectedEditionIds; // +getter +setter
private List<Edition> availableEditions; // +getter
與
<h:selectManyCheckbox value="#{bean.selectedEditionIds}" converter="javax.faces.Long">
<f:selectItems value="#{bean.availableEditions}" var="edition" itemLabel="#{edition.name}" itemValue="#{edition.id}" />
</h:selectManyCheckbox>
感謝#BalusC分享你的知識。 –