JSF组件之selectManyCheckbox默认default 勾选checked

来源:互联网 发布:中银淘宝校园卡欠费 编辑:程序博客网 时间:2024/06/05 20:40

本文主要讲解selectManyCheckbox在渲染初始化的时候如何默认勾选部分checkBox。

网络上JSF组件的知识太少了,被selectManyCheckbox默认勾选的情况搞死了,浪费大半天时间才想明白它的工作原理。

组件源码如下:

<h:selectManyCheckbox value="#{CarouselBackingBean.cityExistList}" id ="cityRelatedList"><c:forEach items="#{CarouselBackingBean.cityModifyList}" var="city"><f:selectItem itemLabel="#{city.adminDivisionCnNm}" itemValue="#{city.adminDivisionCd}" itemDisabled="#{city.validIn}"/></c:forEach></h:selectManyCheckbox >
因为用的是公司的开发框架,部分和JSF标准不太一致,但是原理都是相通的。

cityModifyList中的实体类的属性和组成不重要,重要的是理解一下两点:

1.通过代码

<c:forEach items="#{CarouselBackingBean.cityModifyList}" var="city"><f:selectItem itemLabel="#{city.adminDivisionCnNm}" itemValue="#{city.adminDivisionCd}" itemDisabled="#{city.validIn}"/></c:forEach>

生成的标准JSF代码:
   <f:selectItem itemValue="1" itemLabel="Item 1" itemDisabled ="true" />   <f:selectItem itemValue="2" itemLabel="Item 2"  itemDisabled ="false" />

2.所有selectManyCheckbox中勾选的结果存储在CarouselBackingBean.cityExistList 中,数据结构与cityExistList 如何定义的完全没有一丝关系。JSF将它强制设定为List<String>类型。

3.每勾选一个checkBox,cityExistList 都会size+1,多一个成员;取消勾选则少一个。

明白以上几点相信大家知道如何解决这个问题。

标准做法如下:

        该组件渲染时,在cityExistList中插入需要默认勾选的所有的itemValue。

范例:

我们要勾选

<f:selectItem itemValue="1" itemLabel="Item 1" itemDisabled ="true" />

      这个checkBox,则cityExistList中add一个String类型“1”即可。

附上JSF组件教程  http://www.tutorialspoint.com/jsf/jsf_selectmanycheckbox_tag.htm