`

java分页应用的一个留言板。用struts2标签库写的页面。

阅读更多

 前段时间为了练习想做个博客,结果博客的本事我没有,就做了个留言板。

效果就像这样了。

 

struts2和hibernate用上了。

 

 

 

java留言板

 

贴一下分页组件和留言页面的代码吧。

分页组件

 

package com.leaves.util;

import java.util.List;

/**
 * 用来进行分页实现的javaBean组件
 * 
 * @author leaves
 * 
 */
public class PageModel {
    private int currPage; // 当前页
    private int totalRecords; // 总记录数
    private List<?> list; // 结果集
    private int pageSize; // 每页记录数

    public int getCurrPage() {
	return currPage;
    }

    public void setCurrPage(int currPage) {
	this.currPage = currPage;
    }

    public int getTotalRecords() {
	return totalRecords;
    }

    public void setTotalRecords(int totalRecords) {
	this.totalRecords = totalRecords;
    }

    public List<?> getList() {
	return list;
    }

    public void setList(List<?> list) {
	this.list = list;
    }

    public int getPageSize() {
	return pageSize;
    }

    public void setPageSize(int pageSize) {
	this.pageSize = pageSize;
    }

    /**
     * 获取第一页
     * 
     * @return
     */
    public int getFirstPage() {
	return 1;
    }

    /**
     * 获取最后一页(即最后一页)
     * 
     * @return
     */
    public int getLastPage() {
	return (totalRecords + pageSize - 1) / pageSize;
    }

    /**
     * 获取下一页
     * 
     * @return
     */
    public int getNextPage() {
	return (currPage >= getLastPage()) ? getLastPage() : (currPage + 1);
    }

    /**
     * 获取前一页
     * 
     * @return
     */
    public int getPreviousPage() {
	return currPage <= 1 ? currPage : (currPage - 1);
    }

    @Override
    public String toString() {
	return "PageModel:[currPage:" + getCurrPage() + ",pageSize:" + getPageSize() + ",listSize:" + getList().size()+ "]";
    }
}

 处理查看和保存的action

package com.leaves.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.leaves.dao.LeaveWordDaoImpl;
import com.leaves.dao.UserDaoImpl;
import com.leaves.dao.WordDaoImpl;
import com.leaves.model.LeaveWord;
import com.leaves.util.PageModel;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LeaveWordActiong extends ActionSupport {
    private LeaveWord word;
    private String tip;
    private PageModel pageModel;// 用来进行查询操作的分页模型
    private List<Integer> pageList;

    public List<Integer> getPageList() {
        return pageList;
    }

    public void setPageList(List<Integer> pageList) {
        this.pageList = pageList;
    }

    public PageModel getPageModel() {
	return pageModel;
    }

    public void setPageModel(PageModel pageModel) {
	this.pageModel = pageModel;
    }

    public String getTip() {
	return tip;
    }

    public void setTip(String tip) {
	this.tip = tip;
    }

    public LeaveWord getWord() {
	return word;
    }

    public void setWord(LeaveWord word) {
	this.word = word;
    }

    // 处理用户保存留言
    public String saveWord() throws Exception {
	String username = (String) ActionContext.getContext().getSession().get("user");
	// 如果用户没有登陆 ,直接返回错误信息
	if (username == null) {
	    setTip(getText("saveWordWrong.noUser"));
	    return INPUT;
	}

	if (word.getWordContent() != null && !word.getWordContent().isEmpty()) {

	    word.setLeaveTime(new Date());
	    word.setWordAuthor(new UserDaoImpl().getUser(username));

	    new WordDaoImpl().saveWord(word);
	    // 防止乱码,用国际化索引来指定提示信息。
	    // 此处发现国际化可以防止直接传输中XML和servlet页面之间产生乱码的问题。
	    setTip("saveSuccMsg");
	    return SUCCESS;
	}
	return INPUT;
    }

    // 处理查看所有留言
    public String wordView() throws Exception {
	
	if (pageModel == null) {
	    System.out.println("分页模型为空,创建新模型");
	    pageModel = new PageModel();
	}

	// 做初始化工作,防止第一次访问出错
	if (pageModel.getCurrPage() == 0) {
	    System.out.println("当前页为0,设置为1");
	    pageModel.setCurrPage(1); // 设置默认页面当前页面为1.方便第一次访问页面
	}
	if (pageModel.getPageSize() == 0) {
	    System.out.println("当前页条数为0设置为5");
	    pageModel.setPageSize(5);// 设置每页显示的记录条数。默认为5条
	}
	
	
	
	// 把从页面传参后得到的PageModel传入到getSubWord方法中来获取一个得到结果集的PageModel
	pageModel = new LeaveWordDaoImpl().getSubWord(getPageModel());
	
	if (pageList==null||pageList.get(pageList.size()-1)!=pageModel.getLastPage()) {
	    pageList=new ArrayList<Integer>();
	    for (int i = 1; i <= pageModel.getLastPage(); i++) {
		 pageList.add(i);
	    }
	}
	//根据当前页码和每页数量获得一个分页模型
	setPageModel(pageModel);
	
	// 根据传送进来的国际化索引来设置提示信息。
	setTip(getText(getTip()));
	return SUCCESS;
    }

}

 留言处理的impl

package com.leaves.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.leaves.model.LeaveWord;
import com.leaves.util.HibernateUtil;
import com.leaves.util.PageModel;

/**
 * 此类实现LeaveWordDao,实现具体对 LeaveWord进行操作的方法
 * 
 * @author leaves
 * 
 */
public class LeaveWordDaoImpl implements LeaveWordDao {

	@Override
	public void saveWord(LeaveWord leaveWord) {
	    Session session = HibernateUtil.getSession();
	    try {
		session.beginTransaction();
		// 此处不允许用户修改留言,直接只用save方法
		session.save(leaveWord);
		session.getTransaction().commit();
	    } catch (Exception e) {
		e.printStackTrace();
		session.getTransaction().rollback();
	    }finally{
		HibernateUtil.closeSession();
	    }
	}

	@Override
	public void deleteWord(Integer wordid) {

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<LeaveWord> getWords() {
	    Session session = HibernateUtil.getSession();
	    List<LeaveWord> words = null;
	    try {
		session.beginTransaction();
		// 在事务中间进行查询处理
		String hql = new String("from LeaveWord l order by l.wordId asc");
		words = session.createQuery(hql).list();
		session.getTransaction().commit();
	    }  catch (Exception e) {
		e.printStackTrace();
		session.getTransaction().rollback();
	    }finally{
		HibernateUtil.closeSession();
	    }
		return words;
	}

	@SuppressWarnings("unchecked")
	@Override
	public PageModel getSubWord(PageModel pageModel) {
	    Session session=HibernateUtil.getSession();
	    List<LeaveWord> words = null;
	    session.beginTransaction();
	    try {
		// 在事务中间进行查询处理
		String hql = new String("from LeaveWord as l order by wordId asc");
		// 进行HQL分页查询
		Query query = session.createQuery(hql);
		// 设置起始位置
		query.setFirstResult((pageModel.getCurrPage() - 1) * pageModel.getPageSize());
		// 设置总记录条数
		query.setMaxResults(pageModel.getPageSize());

		// 获取结果
		words = query.list();		

		// 获取数据库总记录数
		int totalRecords = this.getTotalRecords(session);	

		if (totalRecords >= 1) {
			// 设置总记录数
			pageModel.setTotalRecords(totalRecords);
			// 设置记录集合
			pageModel.setList(words);
		}
		session.getTransaction().commit();
		//----------------------------------------------------------------------------------------
	    }  catch (Exception e) {
		e.printStackTrace();
		session.getTransaction().rollback();
	    }finally{
		//HibernateUtil.closeSession();
	    }
		return pageModel;
	}

	/**
	 * 获取总记录数的方法
	 * 
	 * @param session
	 * @return
	 */
	public int getTotalRecords(Session session) {
		String hql = "select count(*) from LeaveWord";
		Long longResult = (Long) session.createQuery(hql).uniqueResult();
		return longResult.intValue();
	}
}

 

 

现实留言页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>allWords</title>
<script type="text/javascript">

function submitByPage(currPage){
	document.getElementById("pageModel.currPage").value=currPage;
	theForm=document.getElementById("getWords");
	theForm.action="wordView";
	theForm.submit();
}

function submitBySize(){
	document.getElementById("pageModel.pageSize").value=document.getElementById("pageModel.pageSize").value;
	theForm=document.getElementById("getWords");
	theForm.action="wordView";
	theForm.submit();
	
	
}

</script>




</head>
<body>
	<h1><s:i18n name="pageI18N.leavesWords"><s:text name="h1.allWordMsg"/></s:i18n></h1>
	<s:set value="pageModel.list" name="wordList" />
		<table border="1" width=100% align="center">
			<s:iterator value="wordList" var="oneWord" status="st">
					<tr>
						<td colspan="2">
						<!-- 输出留言内容 -->
							<s:property value="#oneWord.wordContent" />
						</td>
					</tr>
					<tr bgcolor="#c8eb50" align="right">
						<td>
						<!-- 输出楼层 -->
							<s:text name="view.floorNum">
								<s:param><font color=red><s:property value="#st.count"/></font></s:param>
							</s:text>
						<!-- 输出作者 -->
							<s:text name="view.author">
								<s:param><font color=blue><s:property value="#oneWord.wordAuthor.username"/></font></s:param>
							</s:text>
						<!-- 输出时间 -->
							<s:text name="view.leaveTime">
								<s:param><font color=green><s:date name="#oneWord.leaveTime" format="yyyy-MM-dd hh:mm:ss"/></font></s:param>
							</s:text>
						</td>
					</tr>
				
				
			</s:iterator>
	</table>


	<div>
	<s:i18n name="pageI18N.leavesWords">
	<form  id="getWords">
	<s:token/>
		<s:text name="page.goto">
			<s:param>
			<!-- 此处暂未实现下拉选择页码 -->
				<s:select id="pageModel.currPage"  value="pageModel.currPage" onchange="submitByPage(this.value);" list="pageList" name="pageModel.currPage"></s:select>
			</s:param>
		</s:text>
		
		<!-- 页码控制-->
		<a href="#" onclick="submitByPage(${pageModel.firstPage});"><s:text name="page.first"/></a>
		<a href="#" onclick="submitByPage(${pageModel.previousPage});"><s:text name="page.previous"/></a>
		<a href="#" onclick="submitByPage(${pageModel.nextPage});"><s:text name="page.next"/></a>
		<a href="#" onclick="submitByPage(${pageModel.lastPage});"><s:text name="page.last"/></a>
		
		<s:text name="results.OnePage">
			<s:param>
				<s:select id="pageModel.pageSize" onchange="submitBySize();"  list="{1,2,3,4,5,6,7,8,9}" name="pageModel.pageSize" value="pageModel.pageSize"/>
			</s:param>
		</s:text>
	</form>
	</s:i18n>
	</div>
	<jsp:include page="leaveWord.jsp"></jsp:include>
</body>
</html>

 

 

 

lib包

 

 

发上源码(只有src&WebContent,用的是eclipse for ee )

 

 

 

分享到:
评论

相关推荐

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    &lt;&lt;Java Web典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 请手动搜索其它3卷下载 或点击上传者的链接可直接查到 第1篇 开发工具及框架概述 第1章 ...

    JAVA程序开发大全---上半部分

    19.2.2 创建一个空白的插件项目 331 19.3 RCP应用程序的开发 333 19.3.1 RCP应用开发初步 333 19.3.2 创建用户自定义的菜单和工具条 338 19.4 本章小结 341 第20章 网上宠物商店(JSP+JavaBean) 342 20.1 系统需求...

    JAVA WEB典型模块与项目实战大全.part4

    &lt;&lt;Java Web典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制 共分成4卷 请手动搜索其它3卷下载 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。 2、 Ajax...

    JAVA WEB典型模块与项目实战大全.part3(第三卷)

    &lt;&lt;Java Web典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 请手动搜索其它3卷下载 或点击上传者的链接可直接查到 第1篇 开发工具及框架概述 第1章 ...

    JAVA WEB典型模块与项目实战大全.part1(第一卷)

    第12章 网络留言板(JSP+Servlet+JavaBean) 第13章 网络留言板续——Oracle数据库 第14章 AJAX技术JQuery框架的经典应用 第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+...

    JAVA WEB典型模块与项目实战大全

    12.5 使用dao模式网络留言板  12.6 小结  第13章 网络留言板续——oracle数据库  13.1 连接数据库——idbc驱动程序  13.2 数据库连接池  13.3 commons dbutils组件  13.4 小结  第14章 ajax技术...

    gyqMessageBoard:简单留言板

    gyq消息板 这是我自己写的一个简单的留言板。 它将 struts2 与 hibernate 结合起来。 如果我有时间,我会向它添加 springframework 主要功能:留言回复留言分页和后台编辑这些留言

    WODECMS开源内容管理系统 v1.1.zip

    读写频繁,容易阻塞的需求,可以使用主从库读写分离,mysql类switchDB方法自由切换。 高性能扩展 可以继承memcache,redis等内存缓存运用 大数据量 无需担心数据量足够大的时候,系统跑不了,WODECMS是轻便灵活的...

    火炬博客系统7

    软件及安装说明 &lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    火炬博客系统6

    软件及安装说明 &lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    火炬博客系统5

    软件及安装说明 &lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    WODECMS开源内容管理系统

    读写频繁,容易阻塞的需求,可以使用主从库读写分离,mysql类switchDB方法自由切换。 高性能扩展 可以继承memcache,redis等内存缓存运用 大数据量 无需担心数据量足够大的时候,系统跑不了,WODECMS是轻便灵活的,...

Global site tag (gtag.js) - Google Analytics