jsp分頁技術實現(xiàn)_第1頁
jsp分頁技術實現(xiàn)_第2頁
jsp分頁技術實現(xiàn)_第3頁
jsp分頁技術實現(xiàn)_第4頁
jsp分頁技術實現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、【精品文檔】如有侵權,請聯(lián)系網站刪除,僅供學習與交流jsp分頁技術實現(xiàn).精品文檔.title: JSP分頁技術實現(xiàn)summary:使用工具類實現(xiàn)通用分頁處理author: evan_zhaoemail: evan_zhao目前比較廣泛使用的分頁方式是將查詢結果緩存在HttpSession或有狀態(tài)bean中,翻頁的時候從緩存中取出一頁數(shù)據(jù)顯示。這種方法有兩個主要的缺點:一是用戶可能看到的是過期數(shù)據(jù);二是如果數(shù)據(jù)量非常大時第一次查詢遍歷結果集會耗費很長時間,并且緩存的數(shù)據(jù)也會占用大量內存,效率明顯下降。其它常見的方法還有每次翻頁都查詢一次數(shù)據(jù)庫,從ResultSet中

2、只取出一頁數(shù)據(jù)(使用rs.last();rs.getRow()獲得總計錄條數(shù),使用rs.absolute()定位到本頁起始記錄)。這種方式在某些數(shù)據(jù)庫(如oracle)的JDBC實現(xiàn)中差不多也是需要遍歷所有記錄,實驗證明在記錄數(shù)很大時速度非常慢。至于緩存結果集ResultSet的方法則完全是一種錯誤的做法。因為ResultSet在Statement或Connection關閉時也會被關閉,如果要使ResultSet有效勢必長時間占用數(shù)據(jù)庫連接。因此比較好的分頁做法應該是每次翻頁的時候只從數(shù)據(jù)庫里檢索頁面大小的塊區(qū)的數(shù)據(jù)。這樣雖然每次翻頁都需要查詢數(shù)據(jù)庫,但查詢出的記錄數(shù)很少,網絡傳輸數(shù)據(jù)量不大,

3、如果使用連接池更可以略過最耗時的建立數(shù)據(jù)庫連接過程。而在數(shù)據(jù)庫端有各種成熟的優(yōu)化技術用于提高查詢速度,比在應用服務器層做緩存有效多了。在oracle數(shù)據(jù)庫中查詢結果的行號使用偽列ROWNUM表示(從1開始)。例如select * from employee where rownum<10 返回前10條記錄。但因為rownum是在查詢之后排序之前賦值的,所以查詢employee按birthday排序的第100到120條記錄應該這么寫:        s

4、elect * from (            select my_table.*, rownum as my_rownum from (                select name, birth

5、day from employee order by birthday            ) my_table where rownum <120        ) where my_rownum>=100mySQL可以使用LIMIT子句:select name,

6、 birthday from employee order by birthday LIMIT 99,20DB2有rownumber()函數(shù)用于獲取當前行數(shù)。SQL Server沒研究過,可以參考這篇文章:在Web程序中分頁會被頻繁使用,但分頁的實現(xiàn)細節(jié)卻是編程過程中比較麻煩的事情。大多分頁顯示的查詢操作都同時需要處理復雜的多重查詢條件,sql語句需要動態(tài)拼接組成,再加上分頁需要的記錄定位、總記錄條數(shù)查詢以及查詢結果的遍歷、封裝和顯示,程序會變得很復雜并且難以理解。因此需要一些工具類簡化分頁代碼,使程序員

7、專注于業(yè)務邏輯部分。下面是我設計的兩個工具類:PagedStatement  封裝了數(shù)據(jù)庫連接、總記錄數(shù)查詢、分頁查詢、結果數(shù)據(jù)封裝和關閉數(shù)據(jù)庫連接等操作,并使用了PreparedStatement支持動態(tài)設置參數(shù)。RowSetPage  參考PetStore的page by page iterator模式, 設計RowSetPage用于封裝查詢結果(使用OracleCachedRowSet緩存查詢出的一頁數(shù)據(jù),關于使用CachedRowSet封裝數(shù)據(jù)庫查詢結果請參考JSP頁面查詢顯示常用模式)以及當前頁碼、總記錄

8、條數(shù)、當前記錄數(shù)等信息, 并且可以生成簡單的HTML分頁代碼。PagedStatement 查詢的結果封裝成RowsetPage。下面是簡單的使用示例:1.     /DAO查詢數(shù)據(jù)部分代碼: 2.     public RowSetPage getEmployee(String gender, int pageNo) throws Exception 3.      

9、0;  String sql="select emp_id, emp_code,  user_name, real_name from employee where gender =?" 4.        /使用Oracle數(shù)據(jù)庫的分頁查詢實現(xiàn),每頁顯示5條 5.         PagedSta

10、tement pst =new PagedStatementOracleImpl(sql,  pageNo, 5); 6.         pst.setString(1, gender); 7.         return pst.executeQuery(); 8.     /Servlet處理查詢請求部分代碼:

11、 9.     int pageNo; 10.     try 11.         /可以通過參數(shù)pageno獲得用戶選擇的頁碼 12.         pageNo = Integer.parseInt(request.getParameter("pageno") ); 13.  &

12、#160;  catch(Exception ex) 14.         /默認為第一頁 15.         pageNo=1; 16.     String gender = request.getParameter("gender" ); 17.     r

13、equest.setAttribute("empPage", myBean.getEmployee(gender, pageNo) ); 18.     /JSP顯示部分代碼 19. <% page import = "page.RowSetPage"%> 20.     <script language="javascript"> 21.  

14、       function doQuery() 22.             form1.actionType.value="doQuery" 23.             form1.submit(); 24.    &

15、#160;</script> 25.     <form name=form1 method=get> 26.       <input type=hidden name=actionType> 27.       性別: 28.       <input type=text 

16、name=gender size=1 value="<%=request.getParameter("gender")%>"> 29.       <input type=button value=" 查詢 " onclick="doQuery()"> 30.     RowSetPage empPage&#

17、160;= (RowSetPage)request.getAttribute("empPage"); 31.     if (empPage = null ) empPage = RowSetPage.EMPTY_PAGE; 32.     <table  cellspacing="0" width="90%"> 33.  &

18、#160;      <tr> <td>ID</td> <td>代碼</td> <td>用戶名</td> <td>姓名</td>  </tr> 34.     javax.sql.RowSet empRS = (javax.sql.RowSet) empPage.getRowSe

19、t(); 35.     if (empRS!=null) while (empRS.next() )  36.         <tr>   37.             <td><%= empRS.getString("EMP_ID&

20、quot;)%></td>  38.             <td><%= empRS.getString("EMP_CODE")%></td>   39.             <td><%= empRS.get

21、String("USER_NAME")%></td>  40.             <td><%= empRS.getString("REAL_NAME")%></td>   41.         </tr> 42.   

22、60; / end while 43.         <tr> 44.     /顯示總頁數(shù)和當前頁數(shù)(pageno)以及分頁代碼。 45.     /此處doQuery為頁面上提交查詢動作的javascript函數(shù)名, pageno為標識當前頁碼的參數(shù)名 46.           

23、  <td colspan=4><%= empPage .getHTML("doQuery", "pageno")%></td> 47.         </tr> 48.     </table> 49.     </form> 效果如圖:因為分頁顯示一般都會伴有查

24、詢條件和查詢動作,頁面應已經有校驗查詢條件和提交查詢的javascript方法(如上面的doQuery),所以RowSetPage.getHTML()生成的分頁代碼在用戶選擇新頁碼時直接回調前面的處理提交查詢的javascript方法。注意在顯示查詢結果的時候上次的查詢條件也需要保持,如<input type=text name=gender size=1 value="<%=request.getParameter("gender")%>">。同時由于頁碼的參數(shù)名可以指定,因此也支持在同一

25、頁面中有多個分頁區(qū)。另一種分頁代碼實現(xiàn)是生成每一頁的URL,將查詢參數(shù)和頁碼作為QueryString附在URL后面。這種方法的缺陷是在查詢條件比較復雜時難以處理,并且需要指定處理查詢動作的servlet,可能不適合某些定制的查詢操作。如果對RowSetPage.getHTML()生成的默認分頁代碼不滿意可以編寫自己的分頁處理代碼,RowSetPage提供了很多getter方法用于獲取相關信息(如當前頁碼、總頁數(shù)、 總記錄數(shù)和當前記錄數(shù)等)。在實際應用中可以將分頁查詢和顯示做成jsp taglib, 進一步簡化JSP代碼,屏蔽Java Code。附:分頁

26、工具類的源代碼, 有注釋,應該很容易理解。1.Page.java2.RowSetPage.java(RowSetPage繼承Page)3.PagedStatement.java4.PagedStatementOracleImpl.java(PagedStatementOracleImpl繼承PagedStatement)您可以任意使用這些源代碼,但必須保留author evan_zhao字樣1. /  Page.java 2. /  author: evan_zhao 3. package page; 4. imp

27、ort java.util.List; 5. import java.util.ArrayList; 6. import java.util.Collection; 7. import java.util.Collections; 8.  * Title: 分頁對象<br> 9.  * Description:  用于包含數(shù)據(jù)及分頁信息的對象<br> 10.  *       

28、60;       Page類實現(xiàn)了用于顯示分頁信息的基本方法,但未指定所含數(shù)據(jù)的類型, 11.  *               可根據(jù)需要實現(xiàn)以特定方式組織數(shù)據(jù)的子類,<br> 12.  *             

29、;  如RowSetPage以RowSet封裝數(shù)據(jù),ListPage以List封裝數(shù)據(jù)<br> 13.  * Copyright:    Copyright (c) 2002 <br> 14.  * author evan_zhao <br> 15.  * version 1.0 16. public  class Page implemen

30、ts java.io.Serializable  17.     public static final Page EMPTY_PAGE = new Page(); 18.     public static final int  DEFAULT_PAGE_SIZE = 20; 19.     public 

31、static final  int MAX_PAGE_SIZE = 9999; 20.     private int myPageSize = DEFAULT_PAGE_SIZE; 21.     private int start; 22.     private int avaCount,totalSize; 23.  &

32、#160;  private Object data; 24.     private int currentPageno; 25.     private int totalPageCount; 26.      * 默認構造方法,只構造空頁 27.     protected Page() 28.   &

33、#160;     this.init(0,0,0,DEFAULT_PAGE_SIZE,new Object(); 29.      * 分頁數(shù)據(jù)初始方法,由子類調用 30.      * param start 本頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 31.      * param avaCount 本頁包含的數(shù)據(jù)條數(shù) 32

34、.      * param totalSize 數(shù)據(jù)庫中總記錄條數(shù) 33.      * param pageSize 本頁容量 34.      * param data 本頁包含的數(shù)據(jù) 35.     protected void init(int start, int&#

35、160;avaCount, int totalSize, int pageSize, Object data) 36.         this.avaCount =avaCount; 37.         this.myPageSize = pageSize; 38.       &#

36、160; this.start = start; 39.         this.totalSize = totalSize; 40.         this.data=data; 41.         /System.out.println("avaCount:"+avaCount

37、); 42.         /System.out.println("totalSize:"+totalSize); 43.         if (avaCount>totalSize)  44.             /throw new Run

38、timeException("記錄條數(shù)大于總條數(shù)?!"); 45.         this.currentPageno = (start -1)/pageSize +1; 46.         this.totalPageCount = (totalSize + pageSize -1) / pageSi

39、ze; 47.         if (totalSize=0 && avaCount=0) 48.             this.currentPageno = 1; 49.             this

40、.totalPageCount = 1; 50.         /System.out.println("Start Index to Page No: " + start + "-" + currentPageno); 51.     public  Object getDa

41、ta() 52.         return this.data; 53.      * 取本頁數(shù)據(jù)容量(本頁能包含的記錄數(shù)) 54.      * return 本頁能包含的記錄數(shù) 55.     public int getPageSize() 56.      

42、   return this.myPageSize; 57.      * 是否有下一頁 58.      * return 是否有下一頁 59.     public boolean hasNextPage()  60.         if (avaCount=0&

43、#160;&& totalSize=0) 61.             return false; 62.         return (start + avaCount -1) < totalSize; 63.       retu

44、rn (this.getCurrentPageNo()<this.getTotalPageCount(); 64.      * 是否有上一頁 65.      * return  是否有上一頁 66.     public boolean hasPreviousPage()  67.        &

45、#160;return start > 1; 68.       return (this.getCurrentPageNo()>1); 69.      * 獲取當前頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 70.      * return 71.     public int getStart() 72. 

46、60;       return start; 73.      * 獲取當前頁最后一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 74.      * return 75.     public int getEnd() 76.         int end 

47、;= this.getStart() + this.getSize() -1; 77.         if (end<0)  78.             end = 0; 79.         return end;

48、 80.      * 獲取上一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 81.      * return 記錄對應的rownum 82.     public int getStartOfPreviousPage()  83.         return Math.max(start-myPageSize,

49、0;1); 84.      * 獲取下一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 85.      * return 記錄對應的rownum 86.     public int getStartOfNextPage()  87.         return start + avaCount; 8

50、8.      * 獲取任一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置,每頁條數(shù)使用默認值 89.      * param pageNo 頁號 90.      * return 記錄對應的rownum 91.     public static int getStartOfAnyPage(int pageNo) 92.

51、         return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE); 93.      * 獲取任一頁第一條數(shù)據(jù)在數(shù)據(jù)庫中的位置 94.      * param pageNo 頁號 95.      * param pageSize&

52、#160;每頁包含的記錄數(shù) 96.      * return 記錄對應的rownum 97.     public static int getStartOfAnyPage(int pageNo, int pageSize) 98.         int startIndex = (pageNo-1) *

53、 pageSize + 1; 99.         if ( startIndex < 1) startIndex = 1; 100.         /System.out.println("Page No to Start Index: " +&#

54、160;pageNo + "-" + startIndex); 101.         return startIndex; 102.      * 取本頁包含的記錄數(shù) 103.      * return 本頁包含的記錄數(shù) 104.     public int&#

55、160;getSize()  105.         return avaCount; 106.      * 取數(shù)據(jù)庫中包含的總記錄數(shù) 107.      * return 數(shù)據(jù)庫中包含的總記錄數(shù) 108.     public int getTotalSize()  109.  &#

56、160;      return this.totalSize; 110.      * 取當前頁碼 111.      * return 當前頁碼 112.     public int getCurrentPageNo() 113.         ret

57、urn  this.currentPageno; 114.      * 取總頁碼 115.      * return 總頁碼 116.     public int getTotalPageCount() 117.         return this.totalPageCount; 118.

58、      * param queryJSFunctionName 實現(xiàn)分頁的JS腳本名字,頁碼變動時會自動回調該方法 119.      * param pageNoParamName 頁碼參數(shù)名稱 120.      * return 121.     public String getHTML(String

59、60;queryJSFunctionName, String pageNoParamName) 122.         if (getTotalPageCount()<1) 123.             return "<input type='hidden' name='"+

60、pageNoParamName+"' value='1' >" 124.         if (queryJSFunctionName = null | queryJSFunctionName.trim().length()<1)  125.            

61、60;queryJSFunctionName = "gotoPage" 126.         if (pageNoParamName = null | pageNoParamName.trim().length()<1) 127.             pageNoParamName =

62、 "pageno" 128.         String gotoPage = "_"+queryJSFunctionName; 129.         StringBuffer html = new StringBuffer("n"); 130.     

63、;    html.append("<script language="Javascript1.2">n") 131.              .append("function ").append(gotoPage).append("(pageNo)  n") 132.   

64、;           .append(  "   var curPage=1;  n") 133.              .append(  "   try curPage 

65、= document.all"") 134.              .append(pageNoParamName).append("".value;  n") 135.              .append(  "

66、60;       document.all"").append(pageNoParamName) 136.              .append("".value = pageNo;  n") 137.         &#

67、160;    .append(  "        ").append(queryJSFunctionName).append("(pageNo); n") 138.              .append(  "  

68、0;     return true;  n") 139.              .append(  "   catch(e) n") 140. /            &#

69、160;.append(  "      try n") 141. /             .append(  "           document.forms0.submit();  n&q

70、uot;) 142. /             .append(  "      catch(e)   n") 143.              .append(  "

71、0;         alert('尚未定義查詢方法:function ") 144.              .append(queryJSFunctionName).append("()'); n") 145.         

72、     .append(  "          document.all"").append(pageNoParamName) 146.              .append("".value = curPage;

73、0; n") 147.              .append(  "          return false;  n") 148. /           

74、60; .append(  "        n") 149.              .append(  "     n") 150.          &

75、#160;   .append(  "") 151.              .append(  "</script>  n") 152.              .append( &

76、#160;""); 153.         html.append( "<table  border=0 cellspacing=0 cellpadding=0 align=center width=80%>  n") 154.             &

77、#160;.append( "  <tr>  n") 155.              .append( "    <td align=left><br>  n"); 156.        

78、 html.append(  "       共" ).append( getTotalPageCount() ).append( "頁") 157.              .append(  "     

79、  ") .append(getStart().append(".").append(getEnd() 158.              .append("/").append(this.getTotalSize().append("  n") 159.        

80、0;     .append( "    </td>  n") 160.              .append( "    <td align=right>  n"); 161.   

81、;      if (hasPreviousPage() 162.              html.append( "<a href='javascript:").append(gotoPage) 163.            &

82、#160; .append("(") .append(getCurrentPageNo()-1)  164.              .append( ")'>上一頁</a>   n"); 165.         html.append( 

83、 "       第") 166.              .append(   "        <select name='") 167.       

84、;       .append(pageNoParamName).append("' onChange='javascript:") 168.              .append(gotoPage).append("(this.value)'>n"); 169.     &

85、#160;   String selected = "selected" 170.         for(int i=1;i<=getTotalPageCount();i+) 171.             if( i = getCurrentPageNo() 

86、;) 172.                  selected = "selected" 173.             else selected = "" 174.    

87、0;        html.append( "      <option value='").append(i).append("' ") 175.               .append(selected).append

88、(">").append(i).append("</option>  n"); 176.         if (getCurrentPageNo()>getTotalPageCount() 177.             html.append( "  

89、0;   <option value='").append(getCurrentPageNo() 178.             .append("' selected>").append(getCurrentPageNo() 179.            

90、 .append("</option>  n"); 180.         html.append( "    </select>頁  n"); 181.         if (hasNextPage() 182.     

91、;         html.append( "    <a href='javascript:").append(gotoPage) 183.                .append("(").append(getCurrentPageN

92、o()+1)  184.                .append( ")'>下一頁</a>   n"); 185.         html.append( "</td></tr></table> &#

93、160;n"); 186.         return html.toString(); 187. /  RowSetPage.java 188. /  author: evan_zhao 189. package page; 190. import javax.sql.RowSet; 191.  * <p>Title: RowSetPage</p> 192.  

94、;* <p>Description: 使用RowSet封裝數(shù)據(jù)的分頁對象</p> 193.  * <p>Copyright: Copyright (c) 2003</p> 194.  * author evan_zhao 195.  * version 1.0 196. public class RowSetPage extends Page  197.  &

95、#160;  private javax.sql.RowSet rs; 198.      *空頁 199.     public static final RowSetPage EMPTY_PAGE = new RowSetPage(); 200.      *默認構造方法,創(chuàng)建空頁 201.     pu

96、blic RowSetPage() 202.       this(null, 0,0); 203.      *構造分頁對象 204.      *param crs 包含一頁數(shù)據(jù)的OracleCachedRowSet 205.      *param start 該頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 206.   

97、;   *param totalSize 數(shù)據(jù)庫中包含的記錄總數(shù) 207.     public RowSetPage(RowSet crs, int start, int totalSize)  208.         this(crs,start,totalSize,Page.DEFAULT_PAGE_SIZE); 209.   &

98、#160;  *構造分頁對象 210.      *param crs 包含一頁數(shù)據(jù)的OracleCachedRowSet 211.      *param start 該頁數(shù)據(jù)在數(shù)據(jù)庫中的起始位置 212.      *param totalSize 數(shù)據(jù)庫中包含的記錄總數(shù) 213.      *pageSize&#

99、160;本頁能容納的記錄數(shù) 214.     public RowSetPage(RowSet crs, int start, int totalSize, int pageSize)  215.         try 216.             int

100、0;avaCount=0; 217.             if (crs!=null)  218.                 crs.beforeFirst(); 219.          

101、0;      if (crs.next() 220.                     crs.last(); 221.                 

102、0;   avaCount = crs.getRow(); 222.                 crs.beforeFirst(); 223.             rs = crs; 224.     

103、;        super.init(start,avaCount,totalSize,pageSize,rs); 225.         catch(java.sql.SQLException sqle) 226.             throw new RuntimeExcep

104、tion(sqle.toString(); 227.      *取分頁對象中的記錄數(shù)據(jù) 228.     public javax.sql.RowSet getRowSet() 229.         return rs; 230. /  PagedStatement.java 231. /  author: evan_zhao 232. pa

105、ckage page; 233. import foo.DBUtil; 234. import java.math.BigDecimal; 235. import java.util.List; 236. import java.util.Iterator; 237. import java.util.Collections; 238. import java.sql.Connection; 239. import java.sql.SQLException; 240. import java.sql.R

106、esultSet; 241. import java.sql.Statement; 242. import java.sql.PreparedStatement; 243. import java.sql.Timestamp; 244. import javax.sql.RowSet; 245.  * <p>Title: 分頁查詢</p> 246.  * <p>Description: 根據(jù)查詢語句和頁碼查詢出當頁數(shù)據(jù)</p> 247.  

107、;* <p>Copyright: Copyright (c) 2002</p> 248.  * author evan_zhao 249.  * version 1.0 250. public abstract class PagedStatement  251.     public final static int MAX_PAGE_SIZE

108、0;= Page.MAX_PAGE_SIZE; 252.     protected String countSQL, querySQL; 253.     protected int pageNo,pageSize,startIndex,totalCount; 254.     protected javax.sql.RowSet rowSet; 255.    &

109、#160;protected RowSetPage rowSetPage; 256.     private List boundParams; 257.      * 構造一查詢出所有數(shù)據(jù)的PageStatement 258.      * param sql  query sql 259.     public&#

110、160;PagedStatement(String sql) 260.         this(sql,1,MAX_PAGE_SIZE); 261.      * 構造一查詢出當頁數(shù)據(jù)的PageStatement 262.      * param sql  query sql 263.      

111、;* param pageNo  頁碼 264.     public PagedStatement(String sql, int pageNo) 265.         this(sql, pageNo, Page.DEFAULT_PAGE_SIZE); 266.      * 構造一查詢出當頁數(shù)據(jù)的PageSt

112、atement,并指定每頁顯示記錄條數(shù) 267.      * param sql query sql 268.      * param pageNo 頁碼 269.      * param pageSize 每頁容量 270.     public PagedStatement(String&

113、#160;sql, int pageNo, int pageSize) 271.         this.pageNo = pageNo; 272.         this.pageSize = pageSize; 273.         this.startIndex&#

114、160;= Page.getStartOfAnyPage(pageNo, pageSize); 274.         this.boundParams = Collections.synchronizedList(new java.util.LinkedList(); 275.         this.countSQL = "select c

115、ount(*) from ( " + sql +") " 276.         this.querySQL = intiQuerySQL(sql, this.startIndex, pageSize); 277.      *生成查詢一頁數(shù)據(jù)的sql語句 278.      

116、*param sql 原查詢語句 279.      *startIndex 開始記錄位置 280.      *size 需要獲取的記錄數(shù) 281.     protected abstract  String intiQuerySQL(String sql, int startIndex, int size); 282. 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論