<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大明白的天地

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      5 隨筆 :: 3 文章 :: 58 評論 :: 0 Trackbacks

    我的評論

    推薦你用我新寫的一個分頁標簽。那個比較好用,看我的blog

    @new
    不需要特殊的配置
    valuelist我看了一下,好像還得和spring結合,有些麻煩,好好的一個標簽還得用spring,所以沒再看她,我倒是覺得,一個這樣的表格標簽實際上只是顯示了一頁的數據,無所謂適不適和大數據量和小數據量的問題

    所以只要這個標簽在一頁中顯示的好,靈活,這個標簽就是好標簽,前提是用著要不麻煩,如果你把整個數據集都傳給了他顯示那就使開發者的問題了,而不是標簽的問題?

    現在我發現displaytag總是在第二頁出現顯示不全的問題,不知為什么,不知道有沒有人遇到過這樣的問題.就是第二頁特殊,其他也均沒有問題!!!!怪異!!!
    to even
    實際上我也沒用過displaytag的導出功能,所以我也不知道displaytag是如何設定導出數據的,我想他導出時應該走一遍后臺,你可以看看是如何導出的,這應該是displaytag的功能,如果他要所有的數據,那你就dt通過標志位,在CustomHandler里面取就是了,要多少有多少!
    to keith
    你還是沒有理解我坐的標簽的意思
    我坐的標簽沒有用dt的分頁功能,而是自己做的,拋棄了dt的分頁,正因為dt有像你說的那個缺點,所以只有把所有數據傳過去,他才能正確分頁,所以我自己做了一個分頁的欄,而傳遞給dt的只有一頁數據,所以自然它就不分頁了,但是還要顯示所有數據的分頁怎么辦,所以就設置了一個setmaxCount虛擬的總數,爾并沒有給他那么多數據顯示,但是 我的標簽卻可以根據這個數來計算分頁,達到傳遞一頁數據仍然能夠很好處理分頁的目的,難道你沒有明白嗎,你還是再看看我的代碼吧!!
    一句話就是:dt只顯示一頁,dtp分頁
    我現在只發現dt有這樣幾個參數,s,p,o其他均作為addminInfo參數傳遞,應該不丟失,只是位置放錯了,可以從addinInfo中得到,如果有問題可以自己修改,反正有源碼!

    注意事項看我的主題帖子!
    to keith
    第一點,提取數據問題,這個標簽只是給出一個要提取數據的范圍,倒是你是要用 select top 提,還是oracle的特殊語法提取,那就是開發者的事情了,所以這里不能給出針對不同數據的在sql上的提取,那是進一步對數據庫的處理,和這個標簽沒有關系,否則,我不做了一個hibernate分頁功能了,還的定義不同數據庫的語義,你覺得那時這個標簽該做的事情嗎!!!
    注意:那只是演示代碼,當然提取數據也不止那一種,而且我用的是absolute來直接定位游標位置的,而不是用的循環,只有在提取數據時用了循環, 還有就是用select top 10 ....(sql server)還有其它數據庫類似用法提取數據,我現在就知道這兩種快速提取數據的辦法,你還有其他的好的方法提取數據嗎?高效的!可以告訴我嗎?

    第二點,你說的排序問題,實際上你又把問題攪到一塊去了,這個標簽提供了當前是按第幾列進行排序信息,至于有用到這個信息,在sql語句添加不同 order by的問題,那是利用這個標簽的開發者的事情,同樣不是這個標簽的問題,

    所以利用這個標簽的人只能做這些事情
    根據頁面傳過來的消息,來作整理數據集合的事情,
    標簽提供了用戶接口信息,
    例如,從那條到那條,那列處于排序狀態等等,志與開發者如何利用這信息,那就不是這個標簽的事情了,實際上,完全可以在這個基礎上在進一步的對這些信息在針對不同數據再進行封裝,會更好,而不應該做到這個標簽里面

    不知道你同不同意這個觀點

    如果你不太講究結構的化,我以前做的qixin000tag標簽完全可以達到你的要求,適用范圍不一樣,那個很省事,開發也很快,但是由于數據訪問都封裝到里面去了,有些開發者可能不愿意,所以,我又做了著更開放的小標簽,
    大家可以在這個基礎上再進行更改,實際上也沒有太大的更改之處了,因為就是一個通過頁面信息進行提取數據的功能,至于如何提取,是進一步的事情!!!!
    所以大家可不要說將一個標簽的功能弄得大而全,那就沒有了靈活性,而應該都弄成小的模塊,來組合更好,就像DisplayTag沒有作更好的針對數據的分頁功能一樣,那不是他該做的事情,你說對不對!
    你編譯一下就能夠看出來那些錯誤的地方,然后在改吧!,我也不太記得,因該就是用了foreach的緣故,沒有別的了,你可以檢查一下,把那里改成普通的for即可
    to lyjjq
    span.pagebanner {
    margin-top: 0px;
    margin-bottom: 0px;
    visibility: hidden; //這里隱藏了
    }

    span.pagelinks {
    margin-top: 0px;
    margin-bottom: 0px;
    visibility: hidden; //這里隱藏了
    }
    //這個是我的標簽的分頁欄樣式單:
    span.pagelinkspro {
    background-color: #eee;
    border: 1px dotted #999;
    padding: 2px 4px 2px 4px;
    width: 79%;
    display:block;
    border-top: none;
    margin-bottom: -5px;
    display:block;
    direction:rtl; //這里可以設置左右顯示,但是不能設置居中,遺憾
    }

    個人意見,不推薦更改dt標簽!


    如果你要實現一行顯示多個,如果dt頁面控制不了的話,那你就更該輸出的Collection,它支持很多集合類,你可以在輸出的集合中進行設計,應該可以實現的,我沒有試過!
    to lyjjq
    如果你想把所有數據顯示在一行或者你想靈活控制
    你的dt用法錯誤
    你應該dispaly:table中加一個display:column軟后在其中提取數據循環,而不是像你這樣在display:table加了一個<table>
    上傳圖片及其現實的問題都是dt的事,都可以實現,自己發現吧!

    去掉displaytag的分頁欄,請修改樣式單將其變為hidden即可
    可能是我理解錯誤,現在說幾點你的用法,如果理解錯誤,見諒:
    //dispalytagpro==dtp
    //displaytag == dt
    你把dt的屬性requestURI放到了dtp上,那dt的排序等功能好象就不好使了,你就的自己處理了,傳遞的信息也會錯誤,或者根本沒有傳遞過來,或者傳遞過來了,會丟失一些QueryString信息,所以不推薦改這里,所以我坐的那個標簽是比較充分考慮利用dt的所有功能的前提下來做的這個標簽,如果你修改了dt,那以后,dt作者增加了功能,你不由得改dt,多麻煩,而且dt有很多隱含的功能,等待去發掘,dtp只是提供數據而已,所以盡量在挖掘dt的功能基礎上來改善dtp功能,我覺得更好
    還有就是append屬性,這個可能你沒有發現,我里面有一個提取QueryString除了d -\d+-[s|o|p]字符串以外的其他傳遞信息給PageInfo.AddinInfo屬性,你從哪里可以獲得到你設置的 request.parameter,attribute值,所以這里有點多余,不信你試一試在request里設置一個attribute,然后翻一下頁你就會看到 ,查詢字符串多了一項,而且你也可以從后臺pageInfo.getAddinInfo()中或得到這些信息

    還有就是一個居中的問題,你可以調整樣式單,而不用該代碼,我覺得居中有個問題就是,當你點那些直接跳轉的1,23,4,5時,會出現兩面同時動的情況,因為他們有時是一位數字,有時是兩位數字,會出現同時左右伸縮問題,很難受,左對齊有個好處就是,一側縮放! 所以說各司其責,dt顯示,dtp提供數據,如果你想在一行顯示任意多的數據,你可以細細的查一查dt的功能里有沒有,我想很多功能你么沒有發現,dt很強的,比如那個自由格式的顯示,見我的另一篇隨筆,那就是我不知道dt有沒有這個能力的前提下,仔細想的,結果實現了,所以不要重復做工作。 現在dt做的工作,已經實現了大部分.net里datagrid的功能,很不錯, 所以在java里顯示數據,我現在不愁了,完全用這兩個標簽實現一個現在一個典型論壇的顯示,很強,但是我做一個樣例給大家看看 不好意思,又給提意見了, lyjjq
    自覺的還有不好的地方所以一直沒有拿出來,如果大家需要,現在奉上:
    http://www.tkk7.com/Files/qixin000/displaytagpro.rar
    出于演示目的,切勿模仿,否則讓人給批了,后果自負! : )

    package com.qixin.taglib.displaytagpro.test;

    import com.qixin.taglib.displaytagpro.PageInfo;
    import com.qixin.taglib.displaytagpro.handle.AbstractHandler;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;

    /**
    * Created by qixin.
    * User: qixin
    * Date: 2005-7-25
    * Time: 18:54:17
    */
    public class CustomerHandler extends AbstractHandler {
    protected Object getDisplayCollection(PageInfo pageInfo) {
    // TestList list = new TestList(143, false);
    // pageInfo.setMaxCount(143);
    // List subList = list.subList(pageInfo.getStart() - 1, pageInfo.getEnd() > list.size() ? list.size() : pageInfo.getEnd());
    // return subList;

    List list = new ArrayList();
    try {
    /**
    * 數據庫部分可以進一步封裝,可以不在這里寫,這里只是演示如何提取部分數據
    */
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    String url = "jdbc:microsoft:sqlserver://192.168.0.177:1433;DatabaseName=paper";
    Connection conn = DriverManager.getConnection(url, "sa", "");
    Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    ResultSet rs = st.executeQuery("select ID,編號,存貨人 from 入庫單");
    rs.last();
    int maxCount = rs.getRow();
    pageInfo.setMaxCount(maxCount);
    rs.beforeFirst();
    int begin = pageInfo.getStart() - 1;
    if (begin > 1) rs.absolute(begin);
    int i = 0;
    while (rs.next() && i < pageInfo.getPageSize()) {
    CustomerBean bean = new CustomerBean();
    bean.setId(rs.getString("id"));
    bean.setNo(rs.getString("編號"));
    bean.setPerson(rs.getString("存貨人"));
    list.add(bean);
    i++;
    }
    return list;
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    return list;
    }
    }


    其中:
    這里有很重要的兩句:
    1,就是根據
    pageInf.getStart(), pageInfo.getEnd()獲得要提取的數據范圍

    2,就是要設置
    pageInfo.setMaxCount(int); 設置要分頁的總記錄數,這個可以是一個虛擬的,你想設置多少都行,但是最好和你的集合的記錄數相同,否則,分頁到最后,如果你的處理類沒有處理好數據的提取,會出錯的!

    還有如果泥提取數據不僅僅是根據這個來的,還有你頁面定制的自定義信息,那么可以通過pageInfo.getAddinInfo()來獲得一個Map來供自己進一步處理數據之用,可以達到更好的效果.
    這里有個例子你可以看一看:
    http://www.tkk7.com/Files/qixin000/1.1.rar
    里有四個文件,但是沒有給出完整的例子,如何使用看這里
    http://www.tkk7.com/qixin000/articles/8474.html
    其中一個就是演示如何從數據庫中提取部分數據,主義這個只是演示,至于你在哪里進行數據庫連接,那里傳遞數據,根據你的需要定:
    CustomerHandler.java
    這個給出了一個如何從數據庫中提取部分數據的例子.返回給頁面

    如果你想快速開發而不太在乎結構是否合理,可以采用qixin000tag我寫的一個標簽,就是把數據訪問也放到了標簽里,所以各不用你去管如何提取數據,只需配置好配置文件即可.
    改起來倒是很簡單,因為這個標簽本來就沒多東西,代碼也很簡單
    但是請注意:
    這個標簽是在jdk1.5上開發的,檢查一下你的是不是1.5
    運行環境jboss,tomcat5;其他的我沒有測試過,應該不會出問題,這個標簽沒有用到什么特別的技術

    另外你提的修改方案都已經有了,實際上是重復的
    Collection要顯示的結果及實際上就是這里的name,他把生成結果集命名為你定義的name,可以在你定義的scope范圍內找到這個集合
    pagesize已經有了,這個不說
    rowsize,我的這個標簽中形成的結果集的對象的屬性個數;
    style:我是充分利用了DisplayTag的顯示功能,所以我自己的標簽只有一個class,是固定的叫
    span.pagelinkspro {
    background-color: #eee;
    border: 1px dotted #999;
    padding: 2px 4px 2px 4px;
    width: 79%;
    display:block;
    border-top: none;
    margin-bottom: -5px;
    }
    其他的全部是DispalyTag的,他怎么定義就怎么用,所以也沒有必要取其一個style,因為就一個pagelinkspro,固定的,就是定義下面分頁欄風格的

    不好意思,給你的全否了
    實際上要解決這樣的問題,大家應該想法都差不多
    為什么DisplayTag沒有實現很好的分頁,并不是他不能夠實現,因為這和他做的顯示工作無關,他只是負責把需要的數據顯示出來,而且做得很好。
    開發DisplayTag標簽的人,應該想的是讓我們應用他很好的處理顯示,靈活的定義顯示的功能,而且這點他做到了,而且很好用

    處理大數據量問題是,實際上就是如何提取部分信息,給DispalyTag顯示,但是又得讓它正確處理分頁,這點DisplayTag做不到,因為這也不是他的職責

    我的基本思路是這樣的:
    因為DisplayTag計算分頁也是根據實際的記錄數計算的,而我們傳遞的是部分數據,所以DT計算不正確,必須給他看到好像是全部數據,他才能分頁得很好,如果他做不到,我們就在傳遞部分數據的同時,在傳遞一個總數不就可以正確計算分頁了.
    那就給他一個虛的總數唄;
    我們自己用這個虛的總數來計算該分多少頁,我們自己做這個分頁功能
    而讓DisplayTag來顯示不就行了嗎,每次都經過我們自定一個處理類來完成信息的提取數據給它顯示。

    所以這里沒有什么技術難度,只是一個思路的問題,開始我倒是想改DisplayTag的源代碼了,但是他復雜,怕給改壞了,而且不易于升級版本,所以就作了一個標簽,來由用戶產生數據給DT顯示,而分頁有我的DTP來顯示;現在得到了很好的應用!

    關鍵這里的一個我認為好的擴展是:可以自定義一些信息來處理篩選信息用的AddinInfo,達到了復雜查詢等的目的。
    是的,這個標簽在設計上確實有些問題,但是挺實用,但不適合應用于現在的框架設計,因為它的內部被我給封死了,所以用戶沒有辦法控制

    如果快速開發的化,還是挺好用的,內部實現實際上,我還是分開了,只不過為了方便,把他都寫到了一個標簽里面,一個默認的實現,用戶向擴展的話,我沒有留接口

    如果想更好的控制,而且結構更合理的看我的另一個標簽
    DisplayTagPro
    它可以達到用戶自己控制的程度,而且可以和現在的框架結合得很好
    但是我現在剛發上去后就發現有個缺點就是,要求用戶實現的是一個抽象類AbstractHandler,不是一個接口,這樣就限制了用戶的實用。
    大體思路:

    GridBean:標簽的屬性信息,和一個包含sql語句中的結果的總記錄數
    PageInfo:頁面信息,包含一些當前頁,排序條件,篩選條件等信息
    DBTool:數據庫工具,用于根據GridBean從文件中讀取sql語句結合PageInfo形成需要的結果集.

    DataTable:發送到頁面的一頁信息;
    TableGenerator:結合PageInfo及其GridBean形成發送到頁面的html表格

    1)startTag:
    setinfo(gridbean)
    setinfo(pageinfo)
    datatable = DBTool(gridbean,pageinfo)
    request.setAttribute(gridbean)
    request.setAttribute(datatable)

    2)bodyhandle
    在這里實際上可以攔截修改gridbean,及其datatable信息,
    根據自己的要求控制要顯示信息;

    3)endTag
    htmltable = TableGenerator(gridbean,pageinfo,datatable)
    out.println(htmltable)
    我就會想到大家可能會對這個問題進行討論!這也是很多人喜歡框架設計人員都關心的問題!這個問題,我是知道的!
    實際上我的標簽內部starttag已經實現了返回所有的結合,只是在endtag的時候進行顯示的,只是沒有進行分開.完全可以分開,但是我現在覺得給應用的人會帶來麻煩,用于顯示的數據被分配到了配置文件中,完全可以根據你的替換條件完成不同的業務,(這個替換條件就是你的業務,你完全可以自己開發),但這個理由不充分,我仍然會把他改的結構更合理.
    displaytag和valuelist分開了,但是并不實用,所以我現在針對大多數一般地快速開發應用.
    更好的結構,我會在今后改進!
    樣例代碼:
    http://www.tkk7.com/Files/qixin000/tagtest.rar

    配置文件說明
    http://www.tkk7.com/Files/qixin000/displaytable_readme.rar

    標簽用法很簡單:
    id:是table的id;
    xmlfile:只是標簽到那個配置文件里尋找顯示樣式
    table:到指定的配置文件中尋找該值的table段
    select:定義選擇樣式 checkbox,radio兩種值可以定義
    pageSize:每頁要顯示的記錄數
    主站蜘蛛池模板: 国产自产拍精品视频免费看| 又黄又大的激情视频在线观看免费视频社区在线 | 免费在线观看中文字幕| 亚洲avav天堂av在线网爱情| 成人网站免费大全日韩国产 | 亚洲欧美在线x视频| 国产男女猛烈无遮挡免费网站 | 亚洲成年人啊啊aa在线观看| 青娱乐在线免费观看视频| 免费在线观看视频a| 国产精品美女免费视频观看| 亚洲日韩欧洲乱码AV夜夜摸| 中国一级特黄的片子免费| 亚洲精品V欧洲精品V日韩精品| 三级毛片在线免费观看| 亚洲国产精品国自产电影| 最近中文字幕国语免费完整| 亚洲国产情侣一区二区三区| 欧美大尺寸SUV免费| 羞羞漫画小舞被黄漫免费| 国产a v无码专区亚洲av| 久久99精品免费视频| 亚洲国产日产无码精品| 在线观着免费观看国产黄| jizz在线免费观看| 亚洲AV区无码字幕中文色| 免费无码AV片在线观看软件| 男男gvh肉在线观看免费| 国产精品亚洲一区二区三区在线 | 在线看免费观看AV深夜影院 | 亚洲色精品88色婷婷七月丁香| 一级毛片在线观看免费| 国产精品久久亚洲不卡动漫| 日韩人妻无码免费视频一区二区三区| 日韩精品无码免费视频| 亚洲人成影院在线| 全部免费a级毛片| 69视频在线是免费观看| 免费看一级一级人妻片| 久久亚洲国产精品成人AV秋霞| 永久免费看mv网站入口|