接上一篇 《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