ADF组件之 SelectBooleanCheckbox使用(用于ADF table)

接上一篇 《ADF组件之 SelectBooleanCheckbox使用(用于查询Form)

介绍

    本篇文章主要描述如何在ADF table中使用SelectBooleanCheckbox组件,主要过程由java代码实现,当然还有其它方法。我们先看下实现效果:

    1.数据库结果

       

    2.ADF界面效果,选中一些记录后,提交

       

    3.数据库结果

      


实现步骤:

    1.创建CheckboxInTable类,此类是实现的关键之处,代码意思请参照注释

[java]  view plain copy
  1. package view;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import oracle.adf.view.rich.component.rich.data.RichTable;  
  6.   
  7. import oracle.jbo.Row;  
  8. import oracle.jbo.uicli.binding.JUCtrlBoolBinding;  
  9.   
  10. import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;  
  11.   
  12. import org.apache.myfaces.trinidad.model.CollectionModel;  
  13.   
  14. /** 
  15.  * 将此类在taskflow文件中配置 
  16.  * 如: 
  17.  * <managed-bean id="__4"> 
  18.  *   <managed-bean-name id="__3">EffectiveCheckboxBean</managed-bean-name> 
  19.  *   <managed-bean-class id="__1">view.CheckboxInTableBean</managed-bean-class> 
  20.  *   <managed-bean-scope id="__2">pageFlow</managed-bean-scope> 
  21.  *   <managed-property id="__6"> 
  22.  *     <property-name id="__5">bindingExpr</property-name> 
  23.  *     <value id="__7">#{'#{bindings.Effective}'}</value> 
  24.  *   </managed-property> 
  25.  * </managed-bean> 
  26.  */  
  27. public class CheckboxInTableBean implements Serializable {  
  28.     /** 
  29.      * 可以通过bindingExpr得到,也可以直接在taskflow中配置 
  30.      * 如#{binding.Effective},但是必须保证#{binding.Effective}所处的scope和 
  31.      * 此类在taskflow中配置的scope一致 
  32.      */  
  33.     private transient JUCtrlBoolBinding binding;  
  34.     /** 
  35.      * 绑定ADF Table 
  36.      * 如#{pageFlowScope.EffectiveCheckboxBean.table} 
  37.      */  
  38.     private RichTable table;  
  39.       
  40.     /** 
  41.      * 获取JUCtrlBoolBinding的表达式,在taskflow文件中配置 
  42.      * 如:#{'#{binding.Effective}'},为什么不将#{binding.Effective}的值直接 
  43.      * 配置给binding呢,原因是当在taskflow中配置的scope和#{binding.Effective}所处的scope不一致时, 
  44.      * 将会报范围不一致的错误 
  45.      */  
  46.     private String bindingExpr = null;  
  47.     /** 
  48.      * Checkbox选择的值,如 Y, YES, TRUE等,由用户定义 
  49.      */  
  50.     private Object checkedValue;  
  51.     /** 
  52.      * Checkbox选择的值,如 N, NO, FALSE等,由用户定义 
  53.      */  
  54.     private Object uncheckedValue;  
  55.     public CheckboxInTableBean() {  
  56.         super();  
  57.     }  
  58.       
  59.     /** 
  60.      * 更改Checkbox的值时调用此方法 
  61.      */  
  62.     public void setValue(Object booleanValue) {  
  63.         Object value = null;  
  64.         if(booleanValue == Boolean.TRUE) {  
  65.             value = checkedValue;  
  66.         } else {  
  67.             value = uncheckedValue;  
  68.         }  
  69.         String attribute = this.getBinding().getAttributeDef().getName();  
  70.         if(table != null) {  
  71.             CollectionModel model = (CollectionModel)table.getValue();  
  72.             Object rowData = model.getRowData();  
  73.             if (rowData instanceof JUCtrlHierNodeBinding) {  
  74.                 Row curTableRow = ((JUCtrlHierNodeBinding)rowData).getRow();  
  75.                 curTableRow.setAttribute(attribute, value);  
  76.             }  
  77.         }  
  78.     }  
  79.       
  80.     /** 
  81.      * 通过checkedValue和uncheckedValue获取正确的布尔值 
  82.      * @return 
  83.      */  
  84.     public Object getValue() {  
  85.         String attribute = getBinding().getAttributeDef().getName();  
  86.         if(table != null) {  
  87.             CollectionModel model = (CollectionModel)table.getValue();  
  88.             Object rowData = model.getRowData();  
  89.             if (rowData instanceof JUCtrlHierNodeBinding) {  
  90.                 Object value =  
  91.                     ((JUCtrlHierNodeBinding)rowData).getAttribute(attribute);  
  92.                 return checkedValue.equals(value) ? Boolean.TRUE : Boolean.FALSE;  
  93.             }  
  94.         }  
  95.         return Boolean.FALSE;  
  96.     }  
  97.       
  98.     public void setBinding(JUCtrlBoolBinding binding) {  
  99.         this.binding = binding;  
  100.         this.checkedValue = binding.getValueFromList(0);  
  101.         this.uncheckedValue = binding.getValueFromList(1);  
  102.     }  
  103.   
  104.     public JUCtrlBoolBinding getBinding() {  
  105.         if(bindingExpr != null) {  
  106.             return (JUCtrlBoolBinding)JSFUtils.resolveExpression(bindingExpr);  
  107.         } else {  
  108.             return binding;  
  109.         }  
  110.     }  
  111.   
  112.     public void setBindingExpr(String bindingExpr) {  
  113.         this.bindingExpr = bindingExpr;  
  114.         this.binding = this.getBinding();  
  115.         this.checkedValue = this.binding.getValueFromList(0);  
  116.         this.uncheckedValue = this.binding.getValueFromList(1);  
  117.     }  
  118.   
  119.     public String getBindingExpr() {  
  120.         return bindingExpr;  
  121.     }  
  122.     public void setTable(RichTable table) {  
  123.         this.table = table;  
  124.     }  
  125.   
  126.     public RichTable getTable() {  
  127.         return table;  
  128.     }  
  129. }  

    2.配置CheckboxInTable类到adfc-config.xml中

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">  
  3.   <managed-bean id="__4">  
  4.     <managed-bean-name id="__3">EffectiveCheckboxBean</managed-bean-name>  
  5.     <managed-bean-class id="__1">view.CheckboxInTableBean</managed-bean-class>  
  6.     <managed-bean-scope id="__2">pageFlow</managed-bean-scope>  
  7.     <managed-property id="__6">  
  8.       <property-name id="__5">bindingExpr</property-name>  
  9.       <value id="__7">#{'#{bindings.Effective}'}</value>  
  10.     </managed-property>  
  11.   </managed-bean>  
  12. </adfc-config>  

    3. 创建ADF页面,这里只列出几个特别重要的地方

        绑定ADF table #{pageFlowScope.EffectiveCheckboxBean.table}

        将Checkbox的value设置为 #{pageFlowScope.EffectiveCheckboxBean.value}

        pageDefs中的Effective的配置如下

         

[html]  view plain copy
  1. <button IterBinding="CountriesView1Iterator" StaticList="true"  
  2.             id="Effective">  
  3.       <AttrNames>  
  4.         <Item Value="Effective"/>  
  5.       </AttrNames>  
  6.       <ValueList>  
  7.         <Item Value="Y"/>  
  8.         <Item Value="N"/>  
  9.       </ValueList>  
  10.     </button>  

运行,运行结果参照本文开头部分!

提示:在table中使用SelectBooleanCheckbox还可以通过在VO中创建一个临时字段,类型为Boolean,字段的值将有原始字段转换而来,如Y对应true,N对应false,同样在改变Checkbox的值时,也对应改变原始字段的值。

工程代码下载:http://download.csdn.net/detail/ygj26/4246577

转自:http://blog.csdn.net/ygj26/article/details/7486187
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值