用JSF的selectBooleanCheckbox对表格数据进行选取

现在已经有不少JSF实现了,如RI、myFaces、ADF、ICEFaces等,但是像myFaces、ADF太杂,速度太慢,所以原始的JSF-RI还是我开发的首选。
RI也经常让我苦恼,因为很多东西都要自己写。比如表格的行选取这个问题。
想要像邮箱那样在列表的最前面打勾,就可以对这行记录进行操作,我花了不少力气,网上搜的内容都不能实现,最后还是硬着头皮自己摸索出来了!
下面说一下我的不成熟的经验之谈。
<h:dataTable width="700px" id="objectList" rows="10" columnClasses="col"
styleClass="t_all" value="#{supBack.ldm}" var="list" headerClass="t_header"
frame="box" rules="rows" border="1" cellspacing="0" >
<h:column id="spchecked">
<f:facet name="header"><h:outputText styleClass="headerText" value="选择" /></f:facet>
<h:selectBooleanCheckbox value="#{list.selected}" />
</h:column>
<h:column id="spid">
<f:facet name="header"><h:outputText styleClass="headerText" value="编号" /></f:facet>
<h:outputText value="#{list.spId}"/>
</h:column>
<h:column id="spname">
<f:facet name="header"><h:outputText styleClass="headerText" value="名称" /></f:facet>
<h:outputText value="#{list.spName}"/>
</h:column>

......

</h:dataTable>
<br/>
<h:commandButton value="选取" action="#{supBack.tableCheckAction}"/>


当然,我在POJO里多加了一个private boolean selected,与list.selected对应。
BackBean是关键,dataTable的value我用ListDataModal,因为它可以控制数据行。

private ListDataModel ldm;

......

//给dataTable的value
public ListDataModel getLdm(){
if(this.ldm==null){
ldm= new ListDataModel();
ldm.setWrappedData (supService.getSupList());
}
//上面的if(){}非常重要,它防止了按“选取”按钮后ldm被初始化,保存了
//我们勾选后的状态。如果没有的话,ldm又被supService.getSupList()
//重新赋值了。
return ldm;
}

.......

//表格选取
public void tableCheckAction(){
List<Supplier> beCheckList=new ArrayList<Supplier>();
List<Supplier> cklist=(List<Supplier>)ldm.getWrappedData();
Iterator<Supplier> ckit=cklist.iterator();
while(ckit.hasNext()){
Supplier sp=ckit.next();
if(sp.isSelected()){
beCheckList.add(sp);
}
}
//检验打印结果
Iterator<Supplier> it=beCheckList.iterator();
System.out.println("被选择的记录:");
while(it.hasNext()){
Supplier ckSp=it.next();
System.out.println(ckSp.getSpId()+" "+ckSp.getSpName());
}
}

.......



如果你还有疑问,可以联系我,EMAIL:lxdhdgss@gmail.com
GOOD LUCK!

帮朋友挂个链接:[url=http://www.hzzlprint.com]杭州印刷[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值