noka tag是一套jsp标簽庫,內建了非常多的應用系統常用元件如樹形菜單、折疊菜單、頁籤等
noka tag裡面的dbgrid标簽用于生成一個資料顯示表格。此資料表包括分頁,按列排序,自帶選擇框等功能。目前DBGrid支援SQL Server,Oracle,MySQL,PostgreSQL,DB2五種資料庫海量資料分頁,其它為普通分頁。
該标簽在子表顯示時,當使用sql和class方式時為Ajax加載方式。
注:此标簽內建排序功能,是以不能在sql語句中使用排序的語句。
從6.0.1開始,DBGrid改為異步加載資料,加載資料的url為規則為:nk[dbgrid]db.ndbgrid,其中的[dbgrid]為dbgrid的實際ID值,如一個執行個體的id為da_id,則加載路徑為:nkda_iddb.ndbgrid,該路徑noka會自動識别,如果需要對該路徑作資源控制需要将處理放在noka攔截器之前。
導出到Excel的伺服器路徑為:outexcel[dbgrid].gridexcel
加載子表的伺服器路徑為:subgrid[dbgrid].sgr
<n:DBGrid onfailure="NK_bbb" onsuccess="NK_aaa" outexcelall="true" tableformAction="la.jsp" selectinput="true" pagesize="30" checkrecord="wabc" formatcell="org.test.T.fa(java.lang.String 開卡日期) as 開卡日期 " checkd="checkbox" title="測試表" id="nk_dbsdd" height="400" width="900" checkname="wors" checkvalue="0" descorasc="desc" compositor="a" sql="select * from nk_sys_wordbook " isaintercept="true" /> <script type="text/javascript"> function aa(v){ alert(v.cells(1).innerHTML); } </script> |
裡面的org.ak.T.sc是一個位于org.ak下面的名為T的java類。sc表示該類的方。
法。對應的T類源碼是樣的。需要注意的是這裡方法的參數隻能是String類型。
package org.ak; public class T { public String sc(String id,String a){ return id+":"+a; } } |
Formatcell:可用類型有:
java.lang.String
java.lang.Integer
java.lang.Double
javax.servlet.http.HttpServletRequest
如這樣一條sql 語句 tname like ‘%value%’and tsex =’1’
在noka裡是這樣的: tname like ‘%$[tnames,名字,text,dd]%’|#[ano,and^并且!or^或者]# tsex=’$[tesx,性别,list,1^男!2^女]’
這樣會在界面成一個錄入框 一個條件選擇框 和一個 性别下拉選框。
錄入框類型可選有:date生成一個可以選擇日期的錄入框,如果在該類型設定值為today,則系統會自動以目前日期填充。datetime帶日期和時間錄入框,time時間錄入框。
list 生成一個下拉選框,text生成一個普通的錄入框。
button生成一個包括與name同名的隐藏控件,一個name_show的顯示控件以及一個button按鈕,該類型沒有初始值選項,初始值位置為button調用的方法名,該方法有兩個參數,第一個為隐藏控件的id,第二個為顯示控件件的id,寫法如:aaa=’$[aa_n,公司名,button,af’]
其中af為js方法名,形如function af(a,b);傳給背景的值為隐藏控件的值,這裡的a為隐藏控件的id,b為顯示控件的id。
當查詢表單需要換行時,在需要換行的地方加上$n($n兩端需要有一個空格)便可實作換行。
Ø皮膚配置
皮膚配置位于noka-config.xml檔案的dbgrid塊。Dbgrid中的id為JSP頁面上指定的styleid值。
<dbgrid id="1"> <![CDATA[ body,div,tr,td,table{ font-size:12px; } .nk_select_div{ border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; border-bottom: solid 1px #ccc; position:relative; width:600px; } .nk_dbgrid_div{ border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; border-bottom: solid 1px #ccc; position:relative; } .nk_title_div{ border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; z-index: 100; margin: 0; overflow:hidden; position:relative; } .nk_head_div{ background: none repeat scroll 0 0 #8F8F9A; border-spacing: 1px; margin: 0; overflow: hidden; white-space:nowrap;word-break:keep-all;word-wrap:normal; position:relative; } .nk_body_div{ overflow:auto; background: none repeat scroll 0 0 #8F8F9A; border-spacing: 1px; margin: 0; white-space:nowrap;word-break:keep-all;word-wrap:normal; position:relative; } .nk_bottom_div{ overflow:hidden; border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; } .nk_title_table{ background-color: #ccc; padding: 0; margin:0px } .nk_head_table{ background-color: #ccc; padding: 0; word-break:break-all; margin:0px; } .nk_data_table{ background-color: #ccc; word-break:break-all; padding: 0; margin:0px; } .nk_bottom_table{ background-color: #ccc; padding: 0; } .nk_title{ background: url('${rootpath}/nokatag/tablegrid/images/hrow.gif') repeat-x; background-color: #FFFFFF; height:24px; overflow:hidden; word-break:break-all; } .nk_head{ background: url('${rootpath}/nokatag/tablegrid/images/hrow.gif') repeat-x; background-color: #FFFFFF; height:24px; font-size: 12px; word-break:break-all; padding: 0; text-align: left; } .data_cell_0{ background-color: #FFFFFF; height:24px; font-size: 12px; word-break:break-all; padding: 0; } .data_cell_1{ background-color: #FFBBFF; height:24px; font-size: 12px; word-break:break-all; padding: 0; overflow:hidden; } .data_row_1{ background-color: #AAABFF; height:24px; width: 0px; font-size: 12px; word-break:break-all; padding: 0; } .data_row_2{ background-color: #FFFFFF; height:24px; width: 0px; font-size: 12px; word-break:break-all; padding: 0; } .nk_page_cell_1{ background-color: #FFFFFF; cursor: default; height:24px; background: url('${rootpath}/nokatag/tablegrid/images/hrow.gif') repeat-x; } .images_date{ border: 0;cursor: pointer;width: 16px;height: 19px; margin-right:-3px; vertical-align:-5px; vertical-align:middle; } .nk_sub_images{ border: 0;cursor: pointer;width: 16px;height: 16px; margin-right:-3px; vertical-align:-4px; } .nk_images_but{ border: 0;cursor: pointer;width: 16px;height: 16px; margin-right:0px; vertical-align:-4px; border:1px solid #333333; } .nk_asc_desc_images{ border: 0;cursor: pointer;width: 8px;height: 4px; margin-right:0px; vertical-align:0px; } .nk_cell_menu{ z-index: 999999; } .nk_table_menu{ background-color: #FFFFFF; border-bottom: solid 1px #ccc; } .nk_menu_td_1{ border-top: solid 1px #ccc; border-left: solid 1px #ccc; } .nk_menu_td_2{ border-top: solid 1px #ccc; border-right: solid 1px #ccc; } .nk_input_check{ margin-right:-2px; vertical-align:-2px; } .nk_sub_td{ word-break:break-all; padding: 0; background-color: #FFFFFF; border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; } .select_button{ } .select_input{ border: 1px solid #AFAFAF; height:19px; vertical-align:middle; }]]> </dbgrid> |
子表樣式
<subgrid id="1"> <![CDATA[ 你好啊名字:${0} ]]> </subgrid> |
關于子表的應用說明如下:
1、直接顯示主表某幾列時,需要設定subtable="2,3"和subtabletype="cell"兩個屬性,其中subtable屬性為主表的列順序号,多個列用逗号分隔,subtabletype這裡設為cell表示直接取主表列。當需要自定義樣式時,需要設定subtablestyleid,該屬性的值為noka-config.xml中的subgrid的id值。Subgrid裡面的用${1}來應用主表列,其中1表示主表列序列号,從0開始。功能列(如選擇、序号、子表)列不作為序列号計算。
2、sql方式加載時需要同時設定subtable="select * fromnk_sys_wordbook where wid=?"、subtabletype="sql"、subtablestyleid="0"三個屬性,此時的subformatcell可用于格式化子表的資料,使用方法同主表的formatcell。在sql模式下,subtable為sql語句,參數以?号代替,subtablestyleid為要應用給sql參數的主表列序列号,從0開始。
3、自定義方法加載子表,繼承于org.nokatag.dbgrid.SubGrid接口執行個體
public class TestGrid implements SubGrid { public String getBody(Integer i, Map<String, Object> map,List<String> Cellname) { String datarow=""; Integer row=i;//行号 //---------取得行所有資料------------------------ Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = entry.getKey().toString();//列名 String value = entry.getValue().toString();//值 datarow+=key+"="+value+","; } ///--------取得所有列名------------ for(String cell:Cellname){ datarow+=","+cell; } String sn="獲得資料:"+datarow; return sn; } |
此時需要設定subtable="org.noka.function.TestGrid"和subtabletype="class"兩個屬性,其中subtable為自定義類。
關于ajax資料操作說明,該标簽會自動生一個外部重新整理資料的javascript方法,其方法名為:标簽的ID_reLoadData,如标簽ID為noka,則該方法為noka__reLoadData,不需要任何參數,調用該方法,既可重新整理資料,注意,該方法将重置分頁、排序兩個屬性為初始狀态。
在onsuccess和onfailure屬性均不為空的情況下,該标簽會自動生成一個名為: 标簽的ID_ajaxSubmitDataForm方法,可調用該方法送出dbGrid裡面的表單到伺服器,根據傳回狀态自動調用onsuccess和onfailure裡面的方法,注意,該方法隻能送出資料表單,不包括查詢表單和分頁表單。
輕按兩下和單擊方法的使用具有相同的參數傳入,以下是方法執行個體:
function detail(v){ //i為該行的列号,從0開始,該方法用于取出輕按兩下或單擊行的某個單元格資料 alert($(v.cells[i].id+'_div').innerHTML); } |
詳細内容在noka tag手冊裡面說明比較多
noka tag首頁http://www.97521.com(該首頁位于sourceforge.net上,國内需要翻牆才能通路)