这里写代码片<%@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>
Web 新闻项目-注解版
最新推荐文章于 2022-04-10 22:30:24 发布