新闻发布系统笔记一

1.如果字符串太长,想实现鼠标放上去提示出所有的文字,默认显示一部分可以使用这种方法:

<td><a
title="${commentBack.content }">${fn:substring(commentBack.content,0,15) }...</a></td>    a标签的title属性可以满足需要,fn是jstl的函数标签。

2.分页时要先查询出记录总条数,有时候需要根据条件查询出总条数,所有条件使用and连接,执行sql时会出错,要把第一个and替换为where才可以。

StringBuffer sb=new StringBuffer("select count(*) as total from t_comment");
		if(s_comment.getNewsId()!=-1){
			sb.append(" and newsId="+s_comment.getNewsId());
		}
		if(StringUtil.isNotEmpty(bCommentDate)){
			sb.append(" and TO_DAYS(commentDate)>=TO_DAYS('"+bCommentDate+"')");
		}
		if(StringUtil.isNotEmpty(aCommentDate)){
			sb.append(" and TO_DAYS(commentDate)<=TO_DAYS('"+aCommentDate+"')");
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and", "where"));
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			return rs.getInt("total");
		}else{
			return 0;
		}

3.分页util

public static String getPagation(String targetUrl,int totalNum,int currentPage,int pageSize){}

targetUrl是要传给分页控件显示的地址,totalNum是上面查询出来的总条数,currentPage当前的页数,pageSize页大小

首先需要计算出总页数:int totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;

如果可以整除,总页数就不会加1,否则总页数要加1.

拼接上一页时,要判断是不是第一页,要分开处理

if(currentPage==1){

pageCode.append("<li class=‘disabled‘><a href=‘#‘>上一页</a></li>");

}else{

pageCode.append("<li><a href=‘"+targetUrl+"&page="+(currentPage-1)+"‘>上一页</a></li>");

}

拼接下一页时,类似处理。

我们最多只显示5页,所以要拼接当前页的前后二条数据。代码如下

for(int i=currentPage-2;i<=currentPage+2;i++){

if(i<1 || i>totalPage){

continue;

}

if(i==currentPage){

pageCode.append("<li class=‘active‘><a href=‘#‘>"+i+"</a></li>");

}else{

pageCode.append("<li><a href=‘"+targetUrl+"&page="+i+"‘>"+i+"</a></li>");

}

}

下图是一个拼接的简单图:

下面是完整示例代码:

public static String getPagation(String targetUrl,int totalNum,int currentPage,int pageSize){
		int totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
		StringBuffer pageCode=new StringBuffer();
		pageCode.append("<li><a href='"+targetUrl+"&page=1'>首页</a></li>");
		if(currentPage==1){
			pageCode.append("<li class='disabled'><a href='#'>上一页</a></li>");
		}else{
			pageCode.append("<li><a href='"+targetUrl+"&page="+(currentPage-1)+"'>上一页</a></li>");
		}

		for(int i=currentPage-2;i<=currentPage+2;i++){
			if(i<1 || i>totalPage){
				continue;
			}
			if(i==currentPage){
				pageCode.append("<li class='active'><a href='#'>"+i+"</a></li>");
			}else{
				pageCode.append("<li><a href='"+targetUrl+"&page="+i+"'>"+i+"</a></li>");
			}

		}

		if(currentPage==totalPage){
			pageCode.append("<li class='disabled'><a href='#'>下一页</a></li>");
		}else{
			pageCode.append("<li><a href='"+targetUrl+"&page="+(currentPage+1)+"'>下一页</a></li>");
		}
		pageCode.append("<li><a href='"+targetUrl+"&page="+totalPage+"'>尾页</a></li>");
		return pageCode.toString();
	}

4.分页后台查询处理dao层

需要在dao查询时传入一个PageBean参数,然后再拼接上

if(pageBean!=null){

sb.append(" limit "+pageBean.getStart()+","+pageBean.getPageSize());

}

limit  为分页准备的关键字。下面的查询还包含了其他一些条件。commentdate是前台通过时间控件传回的日期值,TO_DAYS()

mysql内部函数。date的形式为2015-07-06。TO_DAYS(‘2015-06-7‘)返回736121, 返回一个天数
(从年份0开始的天数 )

完整代码:

public List<Comment> commentList(Connection con,Comment s_comment,PageBean pageBean,String bCommentDate,String aCommentDate)throws Exception{
		List<Comment> commentList=new ArrayList<Comment>();
		StringBuffer sb=new StringBuffer("select * from t_comment t1,t_news t2 where t1.newsId=t2.newsId");
		if(s_comment.getNewsId()!=-1){
			sb.append(" and t1.newsId="+s_comment.getNewsId());
		}
		if(StringUtil.isNotEmpty(bCommentDate)){
			sb.append(" and TO_DAYS(t1.commentDate)>=TO_DAYS('"+bCommentDate+"')");
		}
		if(StringUtil.isNotEmpty(aCommentDate)){
			sb.append(" and TO_DAYS(t1.commentDate)<=TO_DAYS('"+aCommentDate+"')");
		}
		sb.append(" order by t1.commentDate desc ");
		if(pageBean!=null){
			sb.append(" limit "+pageBean.getStart()+","+pageBean.getPageSize());
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString());
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			Comment comment=new Comment();
			comment.setCommentId(rs.getInt("commentId"));
			comment.setNewsId(rs.getInt("newsId"));
			comment.setNewsTitle(rs.getString("title"));
			comment.setContent(rs.getString("content"));
			comment.setUserIP(rs.getString("userIP"));
			comment.setCommentDate(DateUtil.formatString(rs.getString("commentDate"), "yyyy-MM-dd HH:mm:ss"));
			commentList.add(comment);
		}
		return commentList;
	}

5.form表单中的东西 通过submit按钮提交之后,就会消失,如果要保留,需要把他们在后台存到session之中,然后再前台通过el表达式获取。也可以通过这个区分是查询还是,通过分页请求的后台。获取不同的参数。

if(StringUtil.isEmpty(page)){
			page="1";
			session.setAttribute("s_bCommentDate", s_bCommentDate);
			session.setAttribute("s_aCommentDate", s_aCommentDate);
		}else{
			s_bCommentDate=(String) session.getAttribute("s_bCommentDate");
			s_aCommentDate=(String) session.getAttribute("s_aCommentDate");
		}

6.My97日期控件

设置开始日期小于结束日期:

开始日期的input id = "startDate"

结束日期的input id = "endDate"

日期 从:<input id="startDate" class="Wdate" type="text" onFocus="var endDate=$dp.$(‘endDate‘);WdatePicker({onpicked:function(){endDate.focus();},maxDate:‘#F{$dp.$D(\‘endDate\‘)}‘})"/>

<input id="endDate" class="Wdate" type="text" onFocus="WdatePicker({minDate:‘#F{$dp.$D(\‘startDate\‘)}‘})"/>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 00:18:54

新闻发布系统笔记一的相关文章

牛腩新闻发布系统笔记——怎么写CSS

根据这牛腩学习敲新闻发布系统已经有一段时间了,挺佩服牛腩的,讲那么多东西,我听着也不觉得枯燥,反而有种,一不留神就会错过很多东西的感觉,所以有些地方也是重复又重复的在看. 这篇博客就总结总结小编在学习牛腩新闻发布系统的时候一些笔记.可能知识还比较原生态,but who cares.现在先提炼出来,以后慢慢的体会和升华吧. 牛腩一部分可以说是和机房相似,也是让我从.net到c#的一个过渡.中间一部分就是讲div +css了.里面的知识说多也不多的,根据不同的需求,它又有各种变形和组合,这加起来就有

新闻发布系统笔记二

1.批量删除的实现:首先是前端的checkbox,实现点击最上面的复选框,会全选或者取消下面的复选框选择状态. 通过jquery实现,涉及了一个属性选择器,用来选择结点或者设置属性.prop法,$("input[name='commentIds']").prop("checked",true); 这一句是设置所有name属性是commentIds的结点checked属性为true.代码如下: $(document).ready(function(){ $("

牛腩新闻发布系统——技术总结

首先,后台代码是没有什么错误的,因为都是根据分层实现的,这里一直在锻炼当中,自然也就熟悉了. 接下来总结一下整体自认为学到的新知识. 首页的制作和它与后台的整合中出现的一些实现较为费劲的地方. 1.制作母版页 为了减少在网页设计时出现的变一页而懂全站的问题,我们使用了母版页,这样,就不必每个页面都去更新,修改一次,所有的网页都会改变,做到了一劳永逸.例如在牛腩新闻发布系统中前台页面画红线的地方. 这样就不存在代码冗余,牵一发而动全身的现象了. 2.表格 (1)Repeater:不会生成多余的代码

新闻发布系统,添加新闻+++文件上传

1.新闻发布系统 2.文件上传+++ ①首先在index.jsp的界面上初始化一个表单. <body> <form enctype="multipart/form-data" action="<%=path%>/1.jsp" method="post"> 姓名:<input type="text" name="username"/> 选择文件:<inpu

安卓项目-利用Sqlite数据库,开发新闻发布系统

本教程致力于程序员可以快速的学习安卓移动端手机开发. 适合于已经习得一种编程语言的同仁. 更多志同道合,想要学习更多编程技术的大神们. 小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮. 本文章是基于上篇文章基础之上进行深入学习的.程序员带你学习安卓开发-XML文档的创建与解析 Sqlite数据库: Sqlite数据库是在安卓中使用较广泛的数据库.其为简单.轻巧的Sql类文件型数据库.因以简单的文本形式保存,所以安全性不是很高.只要拿到sqlite数据库文件就可以得到数据.所以这就决定了sql

牛腩新闻发布系统---外键约束下如何删除记录

一.为什么使用外键? 查了些资料,八个字"保持完整性.一致性",结合我之前做的重构机房收费系统,我的理解是"防止相关表中数据没有关联而变得孤立,最终导致数据冗余",得出这个结论是上次让贾丽敏帮忙点系统时候我最深刻的感受,因为我的数据库关系图中辣么多张表却没有丝毫关系-- 既然官方解释是"完整性和一致性",就先来说明一下: 对于完整性和一致性,不少人都混为一谈了. 完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个

牛腩新闻发布系统概要

开始了B/S项目学习,第一个学习内容就是开发新闻发布系统,跟着牛腩老师的视频学习有几天了,在这个过程 中也积累了点知识,在这里把新闻发布系统的一个轮廓叙述一下了. 系统说明 1.系统的整体功能 就是能够实现后台人员添加新闻,在前台可以浏览新闻并发表评论 2.功能图 3.数据库设计图 4.建表 --建立数据库 create database newssystem --建立类别表 create table category ( id int identity(1,1) primary key, [n

牛腩新闻发布系统——真假分页

牛腩新闻发布系统已近尾声,牛老师重磅推出真假分页作为压轴,足以见得分页的重要性.我们就一起看一下真假分页的实现以及各自的特点. 一.分页简介 当我们显示足够大的数据量时,所有数据显示在一页上,会造成不必要的麻烦,本着为用户服务的态度,我们往往采用分页显示的处理办法.分页主要分为真分页与假分页. 假分页: 从数据库一次性取出所有数据绑定到控件上,再将所有数据根据每页显示记录条数进行分页.当数据量 比较大时,这种分页方法会造成查询速度, 使用户体验度降低,但是跳页速度较快. 真分页:在执行查询操作的

新闻发布系统后台

作为第一个进行的Web系统,新闻发布系统的后台代码和之前编写的机房没有太大的区别,下面主要通过SQLHelper()方法的创建和重构总结下新闻系统的后台. 首先是画用例图.类图.进行数据库的设计!这里不做详细说明每个系统开始的工作.然后编写D层代码SQLHelper(),以ExecuteNonQuery()方法来简单描述SQLHelper()的几次重构 1.主要结构 原来是针对单个的一个功能写一个方法,这里将方法的主要结构拿出,通过传入sql语句来执行类似的操作. public int Exec