ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】
admin
2023-07-31 13:03:04
0


本文提供一个基于ADF Face组件开发样例工程,实现表格开发中常见的处理:

    1.Map对象+Bean对象填充表格的数据行。

    2.使用静态列、动态列、嵌套列的实现方法。

    3.介绍表格中表单组件的使用方法。

    4.介绍表格单行选中事件的处理过程。


本文是基于“ADF Faces 表格应用基础案例一:应用List填充文本表格”编写的,会省去许多细节部分的介绍。


实现的基本思路:

将样例工程的创建过程分为几个小的阶段,每个阶段实现了不同的目标。

第一阶段

    表格数据:绑定管理Bean,应用List返回Map对象填充表格数据行

    表格列结构:静态列

第二阶段

    表格数据:应用List返回(Map对象+Bean对象)混合使用,填充表格数据行

    表格列结构:静态列

第三阶段

    表格数据:应用List返回(Map对象+Bean对象)

    表格列结构:静态列+动态列+嵌套列

第四阶段

    表格数据:

        1.字段中使用表单组件

    表格事件:

        2.数据修改事件(区分Map对象和Bean对象)

        3.单行选中事件



第一阶段:

    应用List返回(Map对象+Bean对象)混合使用,填充表格数据行


创建工程

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


创建JSP页面

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


拖入表格组件,选择绑定数据行

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


填入管理Bean的信息,由IDE自动生成管理Bean代码文件。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


选中创建的管理Bean,点击创建属性按钮,创建类型为List的属性data。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


在Bean中加入初始化表格数据的代码:

package demo.table.app2.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class DemoTableBean { 
    private List data;

    public DemoTableBean() {
        data = new ArrayList();
        data.add(getRowData("r1"));
        data.add(getRowData("r2"));
        data.add(getRowData("r3"));
        data.add(getRowData("r4")); 
    }

    public void setData(List data) { 
        this.data = data;
    }

    public List getData() {
        return data;
    }

    private Map getRowData(String pfx) {
        Map data = new HashMap();
        data.put("header1", pfx + "1");
        data.put("header2", pfx + "2");
        data.put("header3", pfx + "3");
        data.put("header4", pfx + "4");
        data.put("header5", pfx + "5");
        return data;
    }
}

有5列数据,列名为header1 至 header5。

有4行数据分别为 r11……r15至r41……r45。


在JSP中选择表格组件,通过属性页为其增加字段,在Value位置写入表达式“#{row.header1}”作为字段值的引用。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

上图中为表格增加了3个字段:header1、header2、header3。

填入后JSP页面内代码:


<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://xmlns.oracle.com/adf/faces/rich" prefix="af"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    
        
            
                
                    
                
                
                    
                
                
                    
                
            
        
    


运行页面,可以看到表格中填入了数据。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】



第二阶段:

    应用List返回(Map对象+Bean对象)混合使用,填充表格数据行


创建Java类“TableRow”,存储表格行数据:

package demo.table.app2.view;

public class TableRow {
    private String header1, header2, header3, header4, header5;

    public TableRow(String pfx) {
        super();
        header1 = pfx + "1";
        header2 = pfx + "2";
        header3 = pfx + "3";
        header4 = pfx + "4";
        header5 = pfx + "5";
    }

    public void setHeader1(String header1) {
        this.header1 = header1;
    }

    public String getHeader1() {
        return header1;
    }

    public void setHeader2(String header2) {
        this.header2 = header2;
    }

    public String getHeader2() {
        return header2;
    }

    public void setHeader3(String header3) {
        this.header3 = header3;
    }

    public String getHeader3() {
        return header3;
    }

    public void setHeader4(String header4) {
        this.header4 = header4;
    }

    public String getHeader4() {
        return header4;
    }

    public void setHeader5(String header5) {
        this.header5 = header5;
    }

    public String getHeader5() {
        return header5;
    }
}


修改管理Bean代码,在初始化阶段增加3行数据,以“tr”为前缀

package demo.table.app2.view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class DemoTableBean { 
    private List data;

    public DemoTableBean() {
        data = new ArrayList();
        data.add(getRowData("r1"));
        data.add(getRowData("r2"));
        data.add(getRowData("r3"));
        data.add(getRowData("r4"));
        data.add(new TableRow("tr1"));
        data.add(new TableRow("tr2"));
        data.add(new TableRow("tr3"));
    }

    public void setData(List data) { 
        this.data = data;
    }

    public List getData() {
        return data;
    }

    private Map getRowData(String pfx) {
        Map data = new HashMap();
        data.put("header1", pfx + "1");
        data.put("header2", pfx + "2");
        data.put("header3", pfx + "3");
        data.put("header4", pfx + "4");
        data.put("header5", pfx + "5");
        return data;
    }
}


运行页面,可以看到表格中填入了数据。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】



第三阶段:

    表格数据:应用List返回(Map对象+Bean对象)

    表格列结构:静态列+动态列+嵌套列


修改页面标签,实现嵌套列:

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


为管理Bean增加返回动态列名的方法:

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

public String[] getCols(){
        return new String[]{"header4","header5"};
    }

上述代码将header4和header5两列作为动态列。


修改页面标签,在table标签内加入foreache标签循环输出列信息。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】


    
     
  

items绑定获取了动态列名数组,轮询输出为表格列。


运行页面文件

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

其中二、三列被嵌套表现了层次关系,而后两列(header4、header5)为轮询输出的动态列。




第四阶段:

    表格数据:

        1.字段中使用表单组件

    表格事件:

        2.数据修改事件(区分Map对象和Bean对象)

        3.单行选中事件


修改数据环节,表格行数据载体Map和Bean对象是有区别的,Bean对象可以实现更灵活的数据修改动作。

设定Bean对象的修改处理代码,在TableRow类中:

   public void setHeader1(String header1) {
        this.header1 = header1;
        header2 = header1 +"aa";
    }

即当header1的值发生变化的时候,更新header2的值为更新header1值加尾缀“aa”。


修改JSP页面,选择table标签,在Columns属性页中,变更字段1的组件为af:inputText

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

将字段1(对应的列名是header1)输出组件修改为文本框之后,即可实现对字段内容的修改。


修改字段2的输出组件的属性partialTriggers值为“it1”,指向字段1的输出组件id。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

当字段1的值被修改的时候,字段2会自动跟着刷新。


设定表格的行选择方式为“单选”,并绑定selectionListener事件至管理Bean。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】

 


修改管理Bean的事件处理代码,输出选择行的调试信息

public void onSelection(SelectionEvent se) {
        RichTable tab = (RichTable)se.getSource();
        //System.out.println("getSelectedColumns:" + tab.getSelectedColumns());
        System.out.println("getSelectedRowData:" + tab.getSelectedRowData().getClass().getName());
        System.out.println( tab.getSelectedRowData().toString());
        System.out.println("getSelectedRowKeys:" + tab.getSelectedRowKeys().getClass().getName());
        System.out.println( tab.getSelectedRowKeys().toString());
    }


运行页面:

  1. 测试选中表格行,后台会得到并输出行的绑定的数据对象。 

  2. 测试修改字段1的值,若行数据的后台是Map对象(前4行)则字段2不会有变化,若行数据的后台是TableRow对象,则字段2的值会一并被修改。

ADF Faces 表格应用基础案例二:动态字段+事件处理【附样例工程】



附件:http://down.51cto.com/data/2366500

相关内容

热门资讯

瀚云通取得运动型线缆保护拖链专... 国家知识产权局信息显示,深圳市瀚云通科技有限公司取得一项名为“一种运动型线缆的保护拖链”的专利,授权...
第六届成渝双城青少年科技雏鹰研... 人民网重庆7月7日电 (记者胡虹)7月6日,由重庆市科协和成都市科协联合主办的第六届成渝双城青少年科...
三星Galaxy F70 Pr... IT之家 7 月 7 日消息,消息源 Mohammed Khatri 发文,透露三星旗下一款 Gal...
央媒关注!成都太空算力加速布局 7月6日,经济日报发布文章《太空算力加速布局》,其中关注成都构建从卫星制造到算力服务的全链条产业体系...
投资中国,与未来共舞——202... 7月8日下午,一场汇聚顶级资本力量与硬核科技创新力量的盛会——2026新京报贝壳财经年会未来大会 “...
美国恢复对伊朗石油制裁 根据美国财政部外国资产控制办公室当地时间7月7日消息,美国撤销一项授权允许伊朗石油销售的通用许可,相...
暗示要对梅洛尼下达限制令后,特... 当地时间7月7日,正在土耳其参加北约峰会的美国总统特朗普称意大利总理梅洛尼是“好人”,尽管他上周末曾...
广西近4000名被困师生欢呼:... 解放军来了!广西贵港高级中学近4000名师生被困,下午1点26分,解放军冲锋舟全速挺进救援现场,带着...
埃尔多安举行欢迎仪式,特朗普罕... 美国总统特朗普7月7日抵达土耳其首都安卡拉,参加即将在这里举行的北约峰会。当天,在土耳其总统埃尔多安...
纪念高善文:那个敢说真话、爱自... 对于无数投资者而言,高善文不仅是一位经济学家,更是中国证券研究行业从起步到成熟的见证者与塑造者。作者...