1. 程式人生 > >Web 分頁筆記

Web 分頁筆記

這裡寫程式碼片<%@page import="org.news.util.Page"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="org.news.entity.Topic"%>
<%@page import="org.news.entity.News"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% List<News> list1 = (List<News>) request.getAttribute("list1");//左側一 List<News> list2 = (List<News>) request.getAttribute("list2");//左側二 List<News> list3 = (List<News>) request
.getAttribute("list3");//左側三 List<Topic> list = (List<Topic>) request.getAttribute("list");//十一個主題 List<News> list4 = (List<News>) request.getAttribute("list4");//中間新聞列表 Page pageObj = (Page) request.getAttribute("pageObj"); out.print("if語句執行次數1"); if(list1 == null
&& list2 == null && list3 == null) { out.print("if語句執行次數2");//集合裡面有值 就不執行此處 直接往後執行了 request.getRequestDispatcher("/util/news_control.jsp?opr=listTitle") .forward(request, response); return;//表示跳出了這個函式,這個函式後面有語句也不執行了,到此結束,返回到上一層了表示跳出了 } out.print("if語句執行次數3"); out.print("每次換頁後都會彈窗,可見每次傳參給jsp地址後,當前jsp頁面都會重新解析一次,然後把資料庫的內容顯示出來,我猜的 "); int totalPages = pageObj.getTotalPageCount(); //總頁數 int pageIndex = pageObj.getCurrPageNo(); //當前頁碼 %>
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; out.print(basePath); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <base href="<%=basePath%>" /> <!-- base標籤為頁面上的所有連結規定預設地址或預設目標--> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>新聞中國</title> <link href="css/main.css" rel="stylesheet" type="text/css" /> <script language="javascript"> function check(){ /* 這裡是通過js來做了一個使用者名稱及密碼輸出空值的判斷 */ var login_username = document.getElementById("uname"); var login_password = document.getElementById("upwd"); if(login_username.value == ""){ alert("使用者名稱不能為空!請重新填入!"); login_username.focus(); return false; }else if(login_password.value == ""){ alert("密碼不能為空!請重新填入!"); login_password.focus(); return false; } return true; } function focusOnLogin(){ var login_username = document.getElementById("uname"); alert("當body載入時,登入框就會獲得焦點的方法 ,但是登入框感覺也沒發生什麼事啊"); login_username.focus(); } </script> </head> <body onload="focusOnLogin()"> <div id="header"> <div id="top_login"> <form action="util/do_login.jsp" method="post" onsubmit="return check()"> <label> 登入名 </label> <input type="text" name="uname" value="" class="login_input" /> <label> 密&#160;&#160;碼 </label> <input type="password" name="upwd" value="" class="login_input" /> <input type="submit" class="login_sub" value="登入" /> <label id="error"> </label> <img src="images/friend_logo.gif" alt="Google" id="friend_logo" /> </form> </div> <div id="nav"> <div id="logo"> <img src="images/logo.jpg" alt="新聞中國" /> </div> <div id="a_b01"> <img src="images/a_b01.gif" alt="" /> </div> <!--mainnav end--> </div> </div> <div id="container"> <%@include file="index-elements/index_sidebar.jsp"%> <div class="main"> <div class="class_type"> <img src="images/class_type.gif" alt="新聞中心" /> </div> <div class="content"> <ul class="class_date"> <% //這裡就是 主要展示分頁新聞的地方了 /** 這裡用了一個for'迴圈 將list物件指向的集合遍歷出來 就是第10行傳過來的list物件 意思就是 list物件裡面 包含了多少條新聞 就迴圈多少次 用的是加強型for迴圈 不需要指定迴圈次數 然後迴圈裡 定義了一個int n用來做什麼的呢 011取餘等於0 111取餘等於1 211取餘等於2 ... 1111取餘等於0 1211取餘等於1 ... 即當n從1開始是 取餘結果為1 二當迴圈次數等於11時 (這個時候已經迴圈11次) 當第11次時列印</li>結束該標籤 棧實力一行是一個主題 國內 國際 軍事...一共十一個a標籤 當迴圈到12次時 取餘又等於1了 又可以重新列印<li > 然後就是一直迴圈知道list集合迴圈 */ int n=0; for (Topic topic : list) { n++; if (n % 11 == 1) { out.println("<li id='class_month'>"); } %> <a href= "util/news_control.jsp?opr=listTitle&tid=<%=topic.getTid() %>"> <b><%=topic.getTname() %></b></a> <% if (n % 11 == 0) { out.println("</li>"); } } /**然後就是有一個問題 當list迴圈完了 比如實際只有18個主題 迴圈晚11次 又迴圈了7次 第19次時 取餘11不等於0不能列印</li>然後這個for迴圈就結束了 然後就可以執行下面這個 判斷語句了*/ if (n % 11 != 0) { out.println("</li>"); } //這句話的用處就是列印結尾這個</li>標籤結束的用途了 //n=19取餘11等於7!=0所以列印</li>%> </ul> <ul class="classlist"> <% /** 這裡就是 分頁新聞列表了的展示了 先做了個判斷 就如傳過來的list4物件指向的集合是空則 提示一個錯誤 如果傳過來的list4物件指向的集合size()等於0則 提示沒有相關的新聞 */ if (list4 == null) { out.println("<h6>出現錯誤,請稍後再試或與管理員聯絡</h6>"); } else if (list4.size() == 0) { out.println("<h6>抱歉,沒有找到相關的新聞</h6>"); } else { /** 就遍歷是執行list4的 判斷後 集合中有內容 則進入else程式碼塊 這裡初始化了一個時間的實現方法SimpleDateFormat()我猜的 */ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); n = 0; for (News news : list4) { %> <li> <%//下面這個連線通過nid網頁傳參 指向到news_control.jsp ,並解析到該nid對應的新聞頁面頁面 %> <a href='util/news_control.jsp?opr=readNew&nid=<%=news.getNid() %>'> <%=news.getNtitle() %></a> <%//就是覺得這個 SimpleDateFormat()物件的 format()方法 返回一個初始化的時間字串, //這裡是通過news物件獲取到的新聞建立時間 //並把這個時間進行format然後返回一個字串進行顯示%> <span><%=df.format(news.getNcreatedate()) %></span> </li> <% n++; //這個n的用處和上面你的 11是一個意思 就是顯示的新聞列表 五個五個的一組顯示 if (n % 5 == 0) { out.println("<li class='space'></li>"); } } } //到這裡 主頁的新聞list4就都顯示完全了 //下面就是就開始分頁的編寫了 %> <!-- 當前頁就是兩個引數了 一個是總頁數的分母 一個就是分子 這兩個東西一開始就已經獲取到了 26和27行 --> <p align="center"> 當前頁數:[<%=pageIndex%>/<%=totalPages%>]&nbsp; <% //這裡是分頁漢子的顯示部分 /** 當頁碼大於一時才會顯示首頁這個漢子 當頁碼小於最大值時才會顯示末頁這個漢子,當頁碼等於最大值的時候就啥也沒有了因為else語句都沒有, 同理首頁也是這樣,只有當前頁碼大於一時才顯示,等於一或者負數都沒有,當然這裡是不可能為負數的 因為初始值就為1 然後為一時只顯示下一頁和末頁 點選下一頁後 才顯示上一頁和首頁字樣 當頁碼為最大值時 末頁也沒有 課件上有另一種顯示風格 就是當頁碼為最大值時 末頁顯示 但是把他的功能失效 我忘記怎麼寫的了 一會看看 是這麼寫的 if(pageIndex!=1){-正常顯示-} else{ <a href="javaScript:void(0);"style="color:grey;">首頁</a>} */ //好了 下面咱們就去看看 這個 news_control.jsp吧 if (pageIndex > 1) { //控制頁面顯示風格 fenye %> <a href="util/news_control.jsp?opr=listTitle&pageIndex=1">首頁</a>&nbsp; <a href="util/news_control.jsp?opr=listTitle&pageIndex=<%=pageIndex-1%>">上一頁</a> <%} if (pageIndex < totalPages) {//控制頁面顯示風格 %> <a href="util/news_control.jsp?opr=listTitle&pageIndex=<%=pageIndex+1%>">下一頁</a> <a href="util/news_control.jsp?opr=listTitle&pageIndex=<%=totalPages%>">末頁</a> <%}%></p> </ul> </div> <%@include file="index-elements/index_rightbar.html"%> </div> </div> <%@include file="index-elements/index_bottom.html"%> </body> </html>