溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

發(fā)布時(shí)間:2020-07-25 16:53:03 來源:網(wǎng)絡(luò) 閱讀:6330 作者:小伙伴伴 欄目:開發(fā)技術(shù)


本文提供一個(gè)基于ADF Face組件開發(fā)樣例工程,實(shí)現(xiàn)表格開發(fā)中常見的處理:

    1.Map對(duì)象+Bean對(duì)象填充表格的數(shù)據(jù)行。

    2.使用靜態(tài)列、動(dòng)態(tài)列、嵌套列的實(shí)現(xiàn)方法。

    3.介紹表格中表單組件的使用方法。

    4.介紹表格單行選中事件的處理過程。


本文是基于“ADF Faces 表格應(yīng)用基礎(chǔ)案例一:應(yīng)用List<Class>填充文本表格”編寫的,會(huì)省去許多細(xì)節(jié)部分的介紹。


實(shí)現(xiàn)的基本思路:

將樣例工程的創(chuàng)建過程分為幾個(gè)小的階段,每個(gè)階段實(shí)現(xiàn)了不同的目標(biāo)。

第一階段

    表格數(shù)據(jù):綁定管理Bean,應(yīng)用List返回Map對(duì)象填充表格數(shù)據(jù)行

    表格列結(jié)構(gòu):靜態(tài)列

第二階段

    表格數(shù)據(jù):應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)混合使用,填充表格數(shù)據(jù)行

    表格列結(jié)構(gòu):靜態(tài)列

第三階段

    表格數(shù)據(jù):應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)

    表格列結(jié)構(gòu):靜態(tài)列+動(dòng)態(tài)列+嵌套列

第四階段

    表格數(shù)據(jù):

        1.字段中使用表單組件

    表格事件:

        2.數(shù)據(jù)修改事件(區(qū)分Map對(duì)象和Bean對(duì)象)

        3.單行選中事件



第一階段:

    應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)混合使用,填充表格數(shù)據(jù)行


創(chuàng)建工程

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


創(chuàng)建JSP頁(yè)面

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


拖入表格組件,選擇綁定數(shù)據(jù)行

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


填入管理Bean的信息,由IDE自動(dòng)生成管理Bean代碼文件。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


選中創(chuàng)建的管理Bean,點(diǎn)擊創(chuàng)建屬性按鈕,創(chuàng)建類型為L(zhǎng)ist的屬性data。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


在Bean中加入初始化表格數(shù)據(jù)的代碼:

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<String, String> getRowData(String pfx) {
        Map<String, String> data = new HashMap<String, String>();
        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列數(shù)據(jù),列名為header1 至 header5。

有4行數(shù)據(jù)分別為 r11……r15至r41……r45。


在JSP中選擇表格組件,通過屬性頁(yè)為其增加字段,在Value位置寫入表達(dá)式“#{row.header1}”作為字段值的引用。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

上圖中為表格增加了3個(gè)字段:header1、header2、header3。

填入后JSP頁(yè)面內(nèi)代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ 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"%>
<f:view>
    <af:document title="demo2.jsp" id="d1">
        <af:form id="f1">
            <af:table value="#{viewScope.bean1.data}" var="row" rowBandingInterval="0" id="t1">
                <af:column sortable="false" headerText="col1" id="c1">
                    <af:outputText value="#{row.header1}" id="ot1"/>
                </af:column>
                <af:column sortable="false" headerText="col2" id="c2">
                    <af:outputText value="#{row.header2}" id="ot2"/>
                </af:column>
                <af:column sortable="false" headerText="col3" id="c3">
                    <af:outputText value="#{row.header3}" id="ot3"/>
                </af:column>
            </af:table>
        </af:form>
    </af:document>
</f:view>


運(yùn)行頁(yè)面,可以看到表格中填入了數(shù)據(jù)。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】



第二階段:

    應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)混合使用,填充表格數(shù)據(jù)行


創(chuàng)建Java類“TableRow”,存儲(chǔ)表格行數(shù)據(jù):

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行數(shù)據(jù),以“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<String, String> getRowData(String pfx) {
        Map<String, String> data = new HashMap<String, String>();
        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;
    }
}


運(yùn)行頁(yè)面,可以看到表格中填入了數(shù)據(jù)。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】



第三階段:

    表格數(shù)據(jù):應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)

    表格列結(jié)構(gòu):靜態(tài)列+動(dòng)態(tài)列+嵌套列


修改頁(yè)面標(biāo)簽,實(shí)現(xiàn)嵌套列:

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】


為管理Bean增加返回動(dòng)態(tài)列名的方法:

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

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

上述代碼將header4和header5兩列作為動(dòng)態(tài)列。


修改頁(yè)面標(biāo)簽,在table標(biāo)簽內(nèi)加入foreache標(biāo)簽循環(huán)輸出列信息。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

<af:forEach  varStatus="vs"   var="v"  items="#{viewScope.bean1.cols}">
    <af:column sortable="false" headerText="#{v}" id="c7">
     <af:outputText value="#{row[v]}"  id="ot12"/>
  </af:column>
</af:forEach>

items綁定獲取了動(dòng)態(tài)列名數(shù)組,輪詢輸出為表格列。


運(yùn)行頁(yè)面文件

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

其中二、三列被嵌套表現(xiàn)了層次關(guān)系,而后兩列(header4、header5)為輪詢輸出的動(dòng)態(tài)列。




第四階段:

    表格數(shù)據(jù):

        1.字段中使用表單組件

    表格事件:

        2.數(shù)據(jù)修改事件(區(qū)分Map對(duì)象和Bean對(duì)象)

        3.單行選中事件


修改數(shù)據(jù)環(huán)節(jié),表格行數(shù)據(jù)載體Map和Bean對(duì)象是有區(qū)別的,Bean對(duì)象可以實(shí)現(xiàn)更靈活的數(shù)據(jù)修改動(dòng)作。

設(shè)定Bean對(duì)象的修改處理代碼,在TableRow類中:

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

即當(dāng)header1的值發(fā)生變化的時(shí)候,更新header2的值為更新header1值加尾綴“aa”。


修改JSP頁(yè)面,選擇table標(biāo)簽,在Columns屬性頁(yè)中,變更字段1的組件為af:inputText

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

將字段1(對(duì)應(yīng)的列名是header1)輸出組件修改為文本框之后,即可實(shí)現(xiàn)對(duì)字段內(nèi)容的修改。


修改字段2的輸出組件的屬性partialTriggers值為“it1”,指向字段1的輸出組件id。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

當(dāng)字段1的值被修改的時(shí)候,字段2會(huì)自動(dòng)跟著刷新。


設(shè)定表格的行選擇方式為“單選”,并綁定selectionListener事件至管理Bean。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】

 <af:table value="#{viewScope.bean1.data}" var="row" rowBandingInterval="0" id="t1"
            rowSelection="single"
            selectionListener="#{viewScope.bean1.onSelection}">


修改管理Bean的事件處理代碼,輸出選擇行的調(diào)試信息

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());
    }


運(yùn)行頁(yè)面:

  1. 測(cè)試選中表格行,后臺(tái)會(huì)得到并輸出行的綁定的數(shù)據(jù)對(duì)象。 

  2. 測(cè)試修改字段1的值,若行數(shù)據(jù)的后臺(tái)是Map對(duì)象(前4行)則字段2不會(huì)有變化,若行數(shù)據(jù)的后臺(tái)是TableRow對(duì)象,則字段2的值會(huì)一并被修改。

ADF Faces 表格應(yīng)用基礎(chǔ)案例二:動(dòng)態(tài)字段+事件處理【附樣例工程】



附件:http://down.51cto.com/data/2366500
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI