Oracle ADF 实现全选,全不选,多选功能

1 在EO中加入一Boolean类型的字段:isCheck;

2 在VO中加入刚才在EO中的字段;

把VO拖到页面以Table显示,并修改isCheck列的组件为:

[html]  view plain copy
  1. <af:selectBooleanCheckbox value="#{row.isCheck}" id="ot5"/>  

同时在刚才的组件下面加入如下代码:
[html]  view plain copy
  1. <f:facet name="header">  
  2.             <af:selectBooleanCheckbox label="全选" id="sbc1">  
  3.                      <af:clientListener type="valueChange" method="selectAllcheckBox"/>  
  4.                       <af:serverListener type="SelectAllCheckBoxClickEvent"method="#{Bean.multipleChoice}"/>  
  5.                                                                               
  6.               </af:selectBooleanCheckbox>  
  7. </f:facet>      

4 在页面上加入checkBox事件:
[html]  view plain copy
  1. <af:resource type="javascript">  
  2.                 
  3.      function selectAllcheckBox(event) {  
  4.          var source = event.getSource();  
  5.          var isChecked = source.getValue();  
  6.          AdfCustomEvent.queue(source, "SelectAllCheckBoxClickEvent",   
  7.          {  
  8.              params : isChecked  
  9.          }, false);  
  10.      }  
  11.  </af:resource>  

5 在Bean的编写全选或全不选代码,首先把table绑定到bean中,在multipleChoice方法中加入如下代码:

   

[java]  view plain copy
  1. public void multipleChoice(ClientEvent clientEvent){  
  2.         boolean isSelectAllChecked = (Boolean)clientEvent.getParameters().get("params");  
  3.         RichTable rt = get_table();  
  4.       
  5.         for (int i = 0; i < rt.getRowCount(); i++) {  
  6.             JUCtrlHierNodeBinding rowData = (JUCtrlHierNodeBinding)rt.getRowData(i);  
  7.             Row row = rowData.getRow();  
  8.             row.setAttribute("isCheck", isSelectAllChecked);  
  9.             AdfFacesContext.getCurrentInstance().addPartialTarget(rt); //刷新table列表  
  10.         }  
  11.     }  

6 处理业务,比如提交到数据库,在提交前需要判断是否有勾选记录,代码如下:

[java]  view plain copy
  1. public boolean isMoreThanOneRowSelected() {  
  2.         boolean isMoreThanOne = false;  
  3.         DCIteratorBinding dcIterator =ADFUtils.findIterator("VO的迭代器名称");  
  4.         ViewObject vo = dcIterator.getViewObject();  
  5.         for (int i = 0; i < vo.getEstimatedRowCount(); i++) {  
  6.             Row row = dcIterator.getRowAtRangeIndex(i);  
  7.             String isSelected = row.getAttribute("isCheck").toString();  
  8.             if ((isSelected != null) && Boolean.parseBoolean(isSelected)) {  
  9.                 isMoreThanOne = true;  
  10.                 break;  
  11.             }  
  12.         }  
  13.         return isMoreThanOne;  
  14.     }    


7 最终是对勾选的记录编写业务实现,代码如下:

[java]  view plain copy
  1. DCIteratorBinding dcIterator =ADFUtils.findIterator("VO的迭代器名称");  
  2.  RowSetIterator rsi =dcIterator.getRowSetIterator().getRowSet()  
  3.         .createRowSetIterator("自己定义名称");  
  4.  rsi.reset();  
  5.  Row selectRow;  
  6.     
  7.  while (rsi.hasNext()) {  
  8.      Row selectRow= rsi.next();  
  9.      if(selectRow!=null){  
  10.      String isSelected = String.valueOf(row.getAttribute("isCheck"));  
  11.           if ((isSelected != null) && Boolean.parseBoolean(isSelected)) {  
  12.                     //业务处理  
  13.            }  
  14.        }      
  15.    }  

你可能感兴趣的:(Oracle ADF 实现全选,全不选,多选功能)