用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:[email protected]
GOOD LUCK!

帮朋友挂个链接: 杭州印刷

你可能感兴趣的:(JSF,Gmail)