站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题求一struts+hibernate小程序,问题解决,马上给分!

求一struts+hibernate小程序,问题解决,马上给分!

摘要: 求一struts+hibernate小程序,问题解决,马上给分!


我在做用struts+hibernate实现分页显示数据,但我总是出问题,希望大家给我一点方便,提供点代码,是能够用的(网上的好多不能用),也很简单的。对了,能否也把配置文件也帖出来,谢谢。问题解决一定给分!!


帮你UP


共分6步:

1、首先构建一个BO,这里是userbean,里面包含名字和密码两个字段
package onestruts;

import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;


public class Userbean implements Serializable {

/** identifier field */
private String username;

/** identifier field */
private String password;

/** full constructor */

public boolean equals(Object o) {
if (this == o)
return true;

return false;
}

public int hashCode() {

return 0;

}

public Userbean(String username, String password) {
this.username = username;
this.password = password;
}

/** default constructor */
public Userbean() {
}

/**
* @hibernate.property
* column="USERNAME"
* length="20"
*
*/
public String getUsername() {
return this.username;
}

public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

}
2、接着写数据访问层,这里调用hibernate接口
package onestruts;

import java.util.ArrayList;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Session;
import net.sf.hibernate.*;
import java.util.List;

public class DataCollection {
private ArrayList list;
public ArrayList getList() {
return list;
}

public void setList(){
Configuration cfg = null;
SessionFactory sessions=null;
Session session =null;
Transaction tx=null;

try {
cfg = new Configuration().addClass(Userbean.class);
//先生成sessionFactory
sessions = cfg.buildSessionFactory();
//再从sessionFactory得到一个session
session = sessions.openSession();
//启动事务
tx = session.beginTransaction();
list = (ArrayList)session.find("from onestruts.Userbean");
System.out.println("aaa"+list.size());

if (list.size() == 0) {
System.out.println("No products " );

}

}catch(Exception e)
{
try {
tx.rollback();
} catch (HibernateException ex) {
}
e.printStackTrace();
}finally{
try {
session.close();
} catch (HibernateException ex1) {
}
}

}

}

3、数据访问写好后,当然就是控制页面逻辑了,在这里参考matrix上richardcheng的做法,把页面控制单独写成个类,然后在Action中去调用它。
package onestruts;

import java.util.ArrayList;

public class PageController {
private int pageNumber;
private int lastIndexOfPage;
private int itemsPerPage;
private int itemsInPage;
private int lastPageNumber;
private boolean hasPrevious;
private boolean hasNext;
private ArrayList allItems;
/**
* @return Returns the allItems.
*/
public ArrayList getAllItems() {
return allItems;
}
/**
* @param allItems The allItems to set.
*/
public void setAllItems(ArrayList allItems) {
this.allItems = allItems;
}
/**
* @return Returns the hasNext.
*/
public boolean isHasNext() {
return hasNext;
}
/**
* @param hasNext The hasNext to set.
*/
public void setHasNext() {
int items=pageNumber*itemsPerPage;
if(items>=allItems.size()){
this.hasNext =false;
}else{
this.hasNext=true;
}
}
/**
* @return Returns the hasPrevious.
*/
public boolean isHasPrevious() {
return hasPrevious;
}
/**
* @param hasPrevious The hasPrevious to set.
*/
public void setHasPrevious() {
if(pageNumber==1){
this.hasPrevious=false;
}else{
this.hasPrevious=true;
}
}
/**
* @return Returns the itemsInPage.
*/
public int getItemsInPage() {
return this.itemsInPage;
}
/**
* @param itemsInPage The itemsInPage to set.
*/
public void setItemsInPage() {
int temp=pageNumber*itemsPerPage;
if(temp<=allItems.size()){
this.itemsInPage=itemsPerPage;
}else{
this.itemsInPage=( allItems.size() - ((pageNumber-1)*itemsPerPage ));
}
}
/**
* @return Returns the itemsPerPage.
*/
public int getItemsPerPage() {
return itemsPerPage;
}
/**
* @param itemsPerPage The itemsPerPage to set.
*/
public void setItemsPerPage(int itemsPerPage) {
this.itemsPerPage = itemsPerPage;
}
/**
* @return Returns the pageNumber.
*/
public int getPageNumber() {
return pageNumber;
}
/**
* @param pageNumber The pageNumber to set.
*/
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}

/**
* @return Returns the lastIndexOfPage.
*/
public int getLastIndexOfPage() {
return lastIndexOfPage;
}
/**
* @param lastIndexOfPage The lastIndexOfPage to set.
*/
public void setLastIndexOfPage() {
this.lastIndexOfPage =(pageNumber -1)*itemsPerPage;
}

/**
* @return Returns the lastPageNumber.
*/
public int getLastPageNumber() {
return lastPageNumber;
}
/**
* @param lastPageNumber The lastPageNumber to set.
*/
public void setLastPageNumber() {
if(allItems.size()%itemsPerPage==0){
this.lastPageNumber =allItems.size()/itemsPerPage;
}else{
this.lastPageNumber =allItems.size()/itemsPerPage+1;
}
}

}




4、用Action去调用它,接下来就是这个Action
package onestruts;

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import javax.servlet.http.HttpSession;

public class PageAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
String action=null;
HttpSession session=servletRequest.getSession(true);
action=servletRequest.getParameter("action").trim();
PageController controller=(PageController)session.getAttribute("controller");
int pageNumber=controller.getPageNumber();
if(action.compareToIgnoreCase("next")==0){
++pageNumber;
}else if(action.compareToIgnoreCase("pervious")==0){
--pageNumber;
}else if(action.compareToIgnoreCase("first")==0){
pageNumber=1;
}else if(action.compareToIgnoreCase("last")==0){
pageNumber=controller.getLastPageNumber();
}
controller.setPageNumber(pageNumber);
controller.setHasNext();
controller.setHasPrevious();
controller.setItemsInPage();
controller.setLastIndexOfPage();
return (actionMapping.findForward("Page"));
}
}

5、写个单独的类,用来存放一些常用的变量

package onestruts;

public class Constants {
public static int ItemPerPage=1; //一页显示的记录数
}

6,最后当然是jsp页面了

<%@ page contentType="text/html; charset=GBK" %>
<%@page import="java.util.*,onestruts.Constants" %>
<%@ taglib prefix="html" uri="/WEB-INF/struts-html.tld"%>
<%@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld"%>
<%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld"%>
<%//得到连接池对象

//定义一个javaBean同时设定数据(<% Data.setList();%>


<% Data.setList();%>


<%
if(Data.getList().isEmpty())
System.out.print("kong");
int n=Constants.ItemPerPage;
System.out.print("n");
%>






<%
controller.setHasNext();
controller.setHasPrevious();
controller.setItemsInPage();
controller.setLastIndexOfPage();
controller.setLastPageNumber();
%>





<head>
Lomboz JSP
</head>
<body bgcolor="#FFFFFF">
<%int i=0;%>
Page Number:
<table width="100%">
<tr>
<th align='left'>Name</th>
<th align='left'>Pwd</th>

</tr>




<tr>

<td></td>
<td></td>
</tr>


<tr>

<td>First</td>


<td>Previous</td>



<td>Next</td>




<td>Last</td>


</tr>

</table>
</body>


最后,我的配置文件
<?xml version="1.0" encoding="UTF-8"?>
struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<form-beans>
<form-bean name="loginActionForm" type="com.zh.struts.loginActionForm"/>
</form-beans>
















楼上的可谓详细到家了啊


不过 建议lz还是好好看看书...


详细,
但是 Sherlock_Holmes(福尔摩斯) 的分页会不会太耗内存了.记录少没有问题,一旦记录很多的话(比如过万条了).^^^^^^
感觉用HQL语句分页比较好.用查询出来的记录数分页比较好~~
个人意见~~


谢谢了。还想问问有其他的代码没呢?


↑返回目录
前一篇: 我的网站文件夹体积超过了硬盘,怎么办?
后一篇: ajax如何实现可编辑单元格?