您好,登錄后才能下訂單哦!
本文提供一個(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)建工程
創(chuàng)建JSP頁(yè)面
拖入表格組件,選擇綁定數(shù)據(jù)行
填入管理Bean的信息,由IDE自動(dòng)生成管理Bean代碼文件。
選中創(chuàng)建的管理Bean,點(diǎn)擊創(chuàng)建屬性按鈕,創(chuàng)建類型為L(zhǎng)ist的屬性data。
在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}”作為字段值的引用。
上圖中為表格增加了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ù)。
第二階段:
應(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ù)。
第三階段:
表格數(shù)據(jù):應(yīng)用List返回(Map對(duì)象+Bean對(duì)象)
表格列結(jié)構(gòu):靜態(tài)列+動(dòng)態(tài)列+嵌套列
修改頁(yè)面標(biāo)簽,實(shí)現(xiàn)嵌套列:
為管理Bean增加返回動(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)輸出列信息。
<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è)面文件
其中二、三列被嵌套表現(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
將字段1(對(duì)應(yīng)的列名是header1)輸出組件修改為文本框之后,即可實(shí)現(xiàn)對(duì)字段內(nèi)容的修改。
修改字段2的輸出組件的屬性partialTriggers值為“it1”,指向字段1的輸出組件id。
當(dāng)字段1的值被修改的時(shí)候,字段2會(huì)自動(dòng)跟著刷新。
設(shè)定表格的行選擇方式為“單選”,并綁定selectionListener事件至管理Bean。
<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è)面:
測(cè)試選中表格行,后臺(tái)會(huì)得到并輸出行的綁定的數(shù)據(jù)對(duì)象。
測(cè)試修改字段1的值,若行數(shù)據(jù)的后臺(tái)是Map對(duì)象(前4行)則字段2不會(huì)有變化,若行數(shù)據(jù)的后臺(tái)是TableRow對(duì)象,則字段2的值會(huì)一并被修改。
免責(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)容。