ADF11g-010:ADF组件之 SelectBooleanCheckbox使用(用于ADF table)

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

介绍

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

    1.数据库结果

      

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

      

    3.数据库结果

     


实现步骤:

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

package view;

import java.io.Serializable;

import oracle.adf.view.rich.component.rich.data.RichTable;

import oracle.jbo.Row;
import oracle.jbo.uicli.binding.JUCtrlBoolBinding;

import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;

import org.apache.myfaces.trinidad.model.CollectionModel;

/**
 * 将此类在taskflow文件中配置
 * 如:
 * <managed-bean id="__4">
 *   <managed-bean-name id="__3">EffectiveCheckboxBean</managed-bean-name>
 *   <managed-bean-class id="__1">view.CheckboxInTableBean</managed-bean-class>
 *   <managed-bean-scope id="__2">pageFlow</managed-bean-scope>
 *   <managed-property id="__6">
 *     <property-name id="__5">bindingExpr</property-name>
 *     <value id="__7">#{'#{bindings.Effective}'}</value>
 *   </managed-property>
 * </managed-bean>
 */
public class CheckboxInTableBean implements Serializable {
    /**
     * 可以通过bindingExpr得到,也可以直接在taskflow中配置
     * 如#{binding.Effective},但是必须保证#{binding.Effective}所处的scope和
     * 此类在taskflow中配置的scope一致
     */
    private transient JUCtrlBoolBinding binding;
    /**
     * 绑定ADF Table
     * 如#{pageFlowScope.EffectiveCheckboxBean.table}
     */
    private RichTable table;
    
    /**
     * 获取JUCtrlBoolBinding的表达式,在taskflow文件中配置
     * 如:#{'#{binding.Effective}'},为什么不将#{binding.Effective}的值直接
     * 配置给binding呢,原因是当在taskflow中配置的scope和#{binding.Effective}所处的scope不一致时,
     * 将会报范围不一致的错误
     */
    private String bindingExpr = null;
    /**
     * Checkbox选择的值,如 Y, YES, TRUE等,由用户定义
     */
    private Object checkedValue;
    /**
     * Checkbox选择的值,如 N, NO, FALSE等,由用户定义
     */
    private Object uncheckedValue;
    public CheckboxInTableBean() {
        super();
    }
    
    /**
     * 更改Checkbox的值时调用此方法
     */
    public void setValue(Object booleanValue) {
        Object value = null;
        if(booleanValue == Boolean.TRUE) {
            value = checkedValue;
        } else {
            value = uncheckedValue;
        }
        String attribute = this.getBinding().getAttributeDef().getName();
        if(table != null) {
            CollectionModel model = (CollectionModel)table.getValue();
            Object rowData = model.getRowData();
            if (rowData instanceof JUCtrlHierNodeBinding) {
                Row curTableRow = ((JUCtrlHierNodeBinding)rowData).getRow();
                curTableRow.setAttribute(attribute, value);
            }
        }
    }
    
    /**
     * 通过checkedValue和uncheckedValue获取正确的布尔值
     * @return
     */
    public Object getValue() {
        String attribute = getBinding().getAttributeDef().getName();
        if(table != null) {
            CollectionModel model = (CollectionModel)table.getValue();
            Object rowData = model.getRowData();
            if (rowData instanceof JUCtrlHierNodeBinding) {
                Object value =
                    ((JUCtrlHierNodeBinding)rowData).getAttribute(attribute);
                return checkedValue.equals(value) ? Boolean.TRUE : Boolean.FALSE;
            }
        }
        return Boolean.FALSE;
    }
    
    public void setBinding(JUCtrlBoolBinding binding) {
        this.binding = binding;
        this.checkedValue = binding.getValueFromList(0);
        this.uncheckedValue = binding.getValueFromList(1);
    }

    public JUCtrlBoolBinding getBinding() {
        if(bindingExpr != null) {
            return (JUCtrlBoolBinding)JSFUtils.resolveExpression(bindingExpr);
        } else {
            return binding;
        }
    }

    public void setBindingExpr(String bindingExpr) {
        this.bindingExpr = bindingExpr;
        this.binding = this.getBinding();
        this.checkedValue = this.binding.getValueFromList(0);
        this.uncheckedValue = this.binding.getValueFromList(1);
    }

    public String getBindingExpr() {
        return bindingExpr;
    }
    public void setTable(RichTable table) {
        this.table = table;
    }

    public RichTable getTable() {
        return table;
    }
}

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

<?xml version="1.0" encoding="UTF-8" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
  <managed-bean id="__4">
    <managed-bean-name id="__3">EffectiveCheckboxBean</managed-bean-name>
    <managed-bean-class id="__1">view.CheckboxInTableBean</managed-bean-class>
    <managed-bean-scope id="__2">pageFlow</managed-bean-scope>
    <managed-property id="__6">
      <property-name id="__5">bindingExpr</property-name>
      <value id="__7">#{'#{bindings.Effective}'}</value>
    </managed-property>
  </managed-bean>
</adfc-config>

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

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

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

        pageDefs中的Effective的配置如下

        

<button IterBinding="CountriesView1Iterator" StaticList="true"
            id="Effective">
      <AttrNames>
        <Item Value="Effective"/>
      </AttrNames>
      <ValueList>
        <Item Value="Y"/>
        <Item Value="N"/>
      </ValueList>
    </button>

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

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

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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值