问题:分页效果有了,可是分页中有的数据丢失,页面中都不显示,有的数据重复,几页都显示。
急求大虾帮助
这是pager类public class Pager {
private long totalRows;
private int pageSize;
private int currentPage;
private int totalPages;
private int startRow;
private String hql; public String getHql() {
return hql;
} public void setHql(String hql) {
this.hql = hql;
}

public void calRows(String hql) {
hql = "select count(*) " + hql;

} public Pager(long totalRows, int pageSize, String hql) {
this.totalRows = totalRows;
this.pageSize = pageSize;
this.hql = hql;
this.totalPages = (int) (totalRows / pageSize);
int mod = (int) (totalRows % pageSize);
if(mod > 0)
totalPages++;
this.currentPage = 1;
this.startRow = 0;
} public long getTotalRows() {
return totalRows;
} public void setTotalRows(long totalRows) {
this.totalRows = totalRows;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getCurrentPage() {
return currentPage;
} public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
} public int getTotalPages() {
return totalPages;
} public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
} public int getStartRow() {
return startRow;
} public void setStartRow(int startRow) {
this.startRow = startRow;
}

public void first() {
this.currentPage = 1;
this.startRow = 0;
}

public void previous() {
if(currentPage != 1) {
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
}

public void next() {
if(currentPage < totalPages) {
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}

public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}

public void refresh(int page) {
currentPage = page;
if(currentPage > totalPages) {
last();
}
}

public void toPage(int pageNum) {
if(pageNum < 1) {
first();
}
else if(pageNum > totalPages) {
last();
}
else {
currentPage = pageNum;
startRow = (currentPage - 1) * pageSize;
}
}}这是action中的分页方法 public String listAsset(){
String hql = "select asset.id,asset.name,user.realname from Assets asset,User user where asset.rsper=user.id";
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = new Pager(this.assetservice.count(hql),10,hql);
session.put("assetsPage", assetsPage);
assets = this.assetservice.list(assetsPage.getHql(), assetsPage.getStartRow(), assetsPage.getPageSize());
// assets = this.assetservice.list(Assets.class);
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}

@SuppressWarnings("unchecked")
public String first(){
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = (Pager) session.get("assetsPage");
assetsPage.first();
session.put("assetsPage", assetsPage);
this.assets = this.assetservice.list(assetsPage.getHql(),assetsPage.getStartRow(),assetsPage.getPageSize());
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}

@SuppressWarnings("unchecked")
public String last(){
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = (Pager) session.get("assetsPage");
assetsPage.last();
session.put("assetsPage", assetsPage);
this.assets = this.assetservice.list(assetsPage.getHql(),assetsPage.getStartRow(),assetsPage.getPageSize());
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}

@SuppressWarnings("unchecked")
public String next(){
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = (Pager) session.get("assetsPage");
assetsPage.next();
session.put("assetsPage", assetsPage);
this.assets = this.assetservice.list(assetsPage.getHql(),assetsPage.getStartRow(),assetsPage.getPageSize());
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}

@SuppressWarnings("unchecked")
public String previous(){
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = (Pager) session.get("assetsPage");
assetsPage.previous();
session.put("assetsPage", assetsPage);
this.assets = this.assetservice.list(assetsPage.getHql(),assetsPage.getStartRow(),assetsPage.getPageSize());
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}

@SuppressWarnings("unchecked")
public String toPage(){
try {
Map session = ActionContext.getContext().getSession();
this.assetsPage = (Pager) session.get("assetsPage");
assetsPage.toPage(this.pageNum);
session.put("assetsPage", assetsPage);
this.assets = this.assetservice.list(assetsPage.getHql(),assetsPage.getStartRow(),assetsPage.getPageSize());
return SUCCESS;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ERROR;
}
}这是jsp页面 <tbody  id="assetsTbody">
     <s:iterator value="assets" status="stat">
    <tr>
    <td><s:checkbox name="delid" theme="simple" value="false" fieldValue="%{assets[#stat.index][0]}"/>
    </td>
    <td><s:property value="assets[#stat.index][0]"/>
    </td>
    <td><s:property value="assets[#stat.index][1]"/>
    </td>
    <td><s:property value="assets[#stat.index][2]"/>
    </td>
    <td><s:url id="view" action="viewAsset">
<s:param name="assetid"> %{assets[#stat.index][0]}</s:param>
</s:url> <s:a href="%{view}">查看</s:a></td>
<td><s:url id="delete" action="deleteAsset">
<s:param name="assetid"> %{assets[#stat.index][0]}</s:param>
</s:url> <s:a href="%{delete}">删除</s:a></td>
<td><s:url id="toModify" action="toModifyAsset">
<s:param name="assetid"> %{assets[#stat.index][0]}</s:param>
</s:url> <s:a href="%{toModify}">修改</s:a></td>
    </tr>
    </s:iterator>
    </tbody>
    </table>
      <input type="button" value="全选" onClick="selectAll('delid')" />
     <input type="button" value="反选" onClick="selectRverse('delid')" />
    <input type="button" value="删除" onClick="delSelected('delid')" />
    </s:form>
    <br/>
    <s:iterator value="assetsPage">
    总记录数<s:property value="totalRows"/>
    总页数<s:property value="totalPages"/>
    当前页码<s:property value="currentPage"/>
    <s:url id="first" action="first"></s:url>
    <s:a href="%{first}">首页</s:a>
    <s:url id="previous" action="previous"></s:url>
    <s:a href="%{previous}">上一页</s:a>
    <s:url id="next" action="next"></s:url>
    <s:form action="toPage" namespace="/asset">
    第<s:textfield name="pageNum" value="" cssStyle="width:30px"></s:textfield>页
    <s:submit value="GO"></s:submit> 
    </s:form>
    <s:a href="%{next}">下一页</s:a>
    <s:url id="last" action="last"></s:url>
    <s:a href="%{last}">末页</s:a>
    </s:iterator>这是DAO中的内容 public List query(String queryString, int FirstResult, int MaxResult) {

Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Transaction t = session.beginTransaction();
t.begin();
Query queryObject = session.createQuery(queryString);
queryObject.setFirstResult(FirstResult);
queryObject.setMaxResults(MaxResult);
List list = queryObject.list();
t.commit();
session.clear();
session.close();
return list;

解决方案 »

  1.   

    LZ计算分页的代码也许会有问题 检查下吧(比如currentPage  再比如总页数获得的是不是有问题..)另外LZ 即使你的分页写错了也应该是有规律的...(比如每页的信息条数不一样拉 头一页的数据不是数据库应该查出的数据拉 等等等等...)
      

  2.   

    http://hi.baidu.com/wqnljy/blog/item/e61ddb13f6e49d19b8127b53.html  这是一个公共的分页类 直接 用里面的方法
      

  3.   

    这个用自定义标签会更好些。。这个哈可以这样写:
    public List findPaper(Integer pageNo ,Integer pageSize){//
                                                            //
                                                            }
    通过session或request传值,这有个例子:public List getPage(int pageNo, int pageSize) {
    Session session = this.getSession();
    try {
    Criteria c = session.createCriteria(TbT99.class);
    int f = (pageNo - 1) * pageSize;
    c.setFirstResult(f);     //游标位置
    c.setMaxResults(pageSize);  //查询的条目数
    return c.list();
    } finally {
    session.close();
    }
    }

    public List getHqlPage(int pageNo, int pageSize) {
    Session session = this.getSession();
    try {
    Query q = session.createQuery("from TbT99 order by tbId desc");
    int f = (pageNo - 1) * pageSize;
    q.setFirstResult(f);     //游标位置
    q.setMaxResults(pageSize);  //查询的条目数
    return q.list();
    } finally {
    session.close();
    }
    }
      

  4.   

    楼主在你的代码里面简单的测试一下你的分页...
      比如在控制台输出一个集合...
       按照参数传递...分别打印结果看看........
      PS:分页可以推荐楼主用displaytag........
      

  5.   

      将action中的hql语句改为按某字段排序就每问题了,但不知道为什么