2012-06-16 73 views
3

我已經創建了複選框。當我選擇多個複選框時,我怎樣才能獲得多個選中的複選框值?我的代碼是:如何在jsf中獲得多選的複選框值?

<h:selectManyCheckbox id="chkedition" value="#{adcreateBean.editionID}" layout="lineDirection" styleClass="nostyle"> 
<f:selectItems value="#{adcreateBean.editions}" var="item" itemLabel="#{item.editionName}" itemValue="#{item.editionID}"/> 
</h:selectManyCheckbox> 

我已經取值=「#{adcreateBean.editionID}」,所以它返回單個值。

回答

3

​​組件的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> 
+0

感謝#BalusC分享你的知識。 –