Web 分頁筆記
阿新 • • 發佈:2018-12-09
這裡寫程式碼片<%@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> 密  碼 </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用來做什麼的呢
0和11取餘等於0
1和11取餘等於1
2和11取餘等於2
...
11和11取餘等於0
12和11取餘等於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%>]
<%
//這裡是分頁漢子的顯示部分
/**
當頁碼大於一時才會顯示首頁這個漢子
當頁碼小於最大值時才會顯示末頁這個漢子,當頁碼等於最大值的時候就啥也沒有了因為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>
<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>