`
_Yggd
  • 浏览: 89212 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struts2自定义标签+hibernate分页的方法

阅读更多
分页对于数据库的应用来讲是再平常不过了,
不过关于为什么要进行分页,相信各位在搜“struts2自定义标签+hibernate分页的方法”
的时候心里已经明白了,所以我就不多说了,开始上关键代码,求指导:

tld文件描述:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
    <tlibversion>1.0</tlibversion> 
    <jsp-version>1.2</jsp-version> 
    <shortname>mytags</shortname>
    <uri>http://com.fyz/tagslib</uri>
    <info></info>
    <tag> 
<name>pagesproduct</name> 
<tag-class>com.fyz.tag.perpage</tag-class>
<attribute>
    <name>name</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
    <name>url</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
</attribute>
    </tag> 
    <tag>
<name>pagesnew</name> 
<tag-class>com.fyz.tag.perpage_new</tag-class>
<attribute>
    <name>name</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
</attribute>
    </tag>
</taglib>
放在WEB-INF目录下
web.xml描述文件添加:
<jsp-config>
<taglib>
    <taglib-uri>http://com.fyz/tagslib</taglib-uri>
    <taglib-location>/WEB-INF/mypage.tld</taglib-location>
</taglib>
    </jsp-config>

关于struts2的自定义标签来讲,他已经将jstl自定义标签封装起来了
所以在这里,我继承 ComponentTagSupport和Component
代码如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.fyz.tag;

import com.opensymphony.xwork2.util.ValueStack;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;

/**
*
* @author RDGFT
*/
public class perpage extends ComponentTagSupport{
    private String name;
    private String url;
    @Override
    public Component getBean(ValueStack vs, HttpServletRequest hsr, HttpServletResponse hsr1) {
return new Pages(vs,hsr);
    }
    //获得参数 
    @Override
    protected void populateParams() { 
        super.populateParams(); 
         
        Pages pages = (Pages)component; 
        pages.setName(name);
pages.setUrl(url);
    } 

    /**
     * @return the name
     */
    public String getName() {
return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
this.name = name;
    }

    /**
     * @return the url
     */
    public String getUrl() {
return url;
    }

    /**
     * @param url the url to set
     */
    public void setUrl(String url) {
this.url = url;
    }
   
}


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.fyz.tag;

import com.fyz.dao.ProductDAO;
import com.fyz.dao.port.ProductPort;
import com.fyz.pojo.Product;
import com.opensymphony.xwork2.util.ValueStack;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.components.Component;

/**
*
* @author RDGFT
*/
public class Pages extends Component {

    private String name;
    private String url;
    private ProductPort product = new ProductDAO();
    //以下的变量都是在分页中要用的的变量
    private boolean isFirst = false;//是否为第一页
    private boolean isLast = false;//是否为最后一页
    private boolean firstislast = false;//只有一页
    private int recordsCount;//记录记录总数
    private int currentPage;//记录当前页面
    private int pagecount;
    private final int recordsInOnePage = 6;//设置每页显示数目
    private HttpServletRequest request;

    /**
     *
     * @param vs
     */
    public Pages(ValueStack vs,HttpServletRequest request) {
super(vs);
this.request=request;
this.recordsCount = product.findAll().size();
pagecount = recordsCount / recordsInOnePage + (recordsCount % recordsInOnePage == 0 ? (0) : (1));
    }

    @Override
    public boolean start(Writer writer) {
boolean result = super.start(writer);
StringBuilder str = new StringBuilder();
StringBuilder str2 = new StringBuilder();
boolean isValid = true;
if (isValid) {
    if (this.name != null && this.name.equals(""));
    this.name = (String) this.getStack().findValue(name);
} else {
    isValid = false;
}

if (isValid) {
    if (request.getParameter("pageNumber") == null)//判断是否是第一页
    {
currentPage = 1;
isFirst = true;
System.out.println("perpage中");

    } else {
currentPage = Integer.parseInt(request.getParameter("pageNumber"))==0?1:Integer.parseInt(request.getParameter("pageNumber"));
    }
    List<Product> list = product.getproductbyfenye(recordsInOnePage, currentPage);

    //考虑最后是否是最后一页,分两种情况
    //如果总记录数能够被每页记录数整除,页码为倒数第二页码即可作为最后一页
    if (recordsCount % recordsInOnePage == 0 && currentPage == recordsCount / recordsInOnePage) {
isLast = true;
if (recordsCount == 6) {
    firstislast = true;
}


    } //如果总记录数不能够被每页记录数整除,页码为倒数第一页码才作为最后一页
    else if (recordsCount % recordsInOnePage != 0 && currentPage == recordsCount / recordsInOnePage + 1) {
isLast = true;
if (recordsCount < 6) {
    firstislast = true;
}


    } else {
isLast = false;
    }
    for (Product p : list) {
System.out.println(p.getName());
str.append("<tr>"
+ "<td rowspan='2' align='center' class='altbg2'>"
+ p.getNumber()
+ "</td>"
+ "<td class='altbg2' rowspan='2' align=center'>"
+ p.getName()
+ "</td>"
+ "<td class='altbg2' rowspan='2' align='center'>"
+ p.getBrand()
+ "</td>"
+ "<td class='altbg2' rowspan='2' align='center'>"
+ p.getMode()
+ "</td>"
+ "<td class='altbg2' rowspan='2' align='center'>"
+ p.getPrice()
+ "</td>"
+ "<td class='altbg2' rowspan='2' align='center'>"
+ "<a href='admin/updateProduct.jsp?id=" + p.getId() + "&number=" + p.getNumber() + "&name=" + p.getName() + "&brand=" + p.getBrand() + "&model=" + p.getMode() + "&price=" + p.getPrice() + "&picture=" + p.getPicture() + "&des=" + p.getDes() + "'>修改</a>"
+ "</td>"
+ "<td class='altbg2' rowspan='2' align='center'>"
+ "<a href='deleteproduct.action?id=" + p.getId() + "'>删除</a>"
+ "</td>"
+ "</tr>"
+ "<tr>"
+ "</tr>");
// str.append("<tr><td rowspan='2' align='center' class='altbg2'>").append(p.getNumber()).append("</td><td class='altbg2' rowspan='2' align='center'>").append(p.getName()).append("</td><td class='altbg2' rowspan='2' align='center>").append(p.getBrand()).append("</td><td class='altbg2' rowspan='2' align='center>").append(p.getMode()).append("</td><td class='altbg2' rowspan='2' align='center>").append(p.getPrice()).append("</td><td class='altbg2' rowspan='2' align='center>" + "<a href='updateproduct.action?id=").append(p.getId()).append("'>修改</a></td><td class='altbg2' rowspan='2' align='center'><a href='deleteproduct.action?id=").append(p.getId()).append("'>删除</a>"
// + "</td>"
// + "</tr><tr></tr>");
    }
    str2.append("<font color='red'><center>"
    + "共"+pagecount+"页"
    +"第"+currentPage+"页"
    +"</center></font>");
    if(firstislast){

    }
    if(isLast){
str2.append("<center>"
+ "<a href='admin/manageProduct.jsp?pageNumber=1'>首页</a>"
+ "<a href='admin/manageProduct.jsp?pageNumber=" + (currentPage - 1) + "'>上一页</a>"
+ "<a href='admin/manageProduct.jsp?pageNumber=" + pagecount + "'>最后一页</a>"
+ "</center>");
    }
    if (!isLast) {
str2.append("<center>"
+ "<a href='admin/manageProduct.jsp?pageNumber=1'>首页</a>"
+ "<a href='admin/manageProduct.jsp?pageNumber=" + (currentPage - 1) + "'>上一页</a>"
+ "<a href='admin/manageProduct.jsp?pageNumber=" + (currentPage + 1) + "'>下一页</a>"
+ "<a href='admin/manageProduct.jsp?pageNumber=" + pagecount + "'>最后一页</a>"
+ "</center>");
    }
   
    try {
writer.write(str.toString());
writer.write(str2.toString());
writer.flush();
    } catch (IOException ex) {
Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);
    }

}
return result;
    }

    /**
     * @return the name
     */
    public String getName() {
return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
this.name = name;
    }

    /**
     * @return the url
     */
    public String getUrl() {
return url;
    }

    /**
     * @param url the url to set
     */
    public void setUrl(String url) {
this.url = url;
    }
}



hibernate那部分如下:



  @Override
    public List getproductbyfenye(int onepagesize, int currentpage) {
String sql="from Product as p order by p.id";
Query query=super.getSession().createQuery(sql);
query.setFirstResult((currentpage-1)*6);
query.setMaxResults(onepagesize);
return query.list();
    }





页面引用:


<%@ page  contentType = " text/html; charset=gb2312 " pageEncoding="gb2312"%>
<%@taglib prefix="mytags" uri="http://com.fyz/tagslib"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
    <head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>管理人员-管理</title>
<link rel="stylesheet" type="text/css" href="${basePath}css/style_admin.css">
    </head>
    <body>
<table cellspacing="1" cellpadding="4" width="100%"
       class="tableborder" id="table3">
    <form name="form1" action="showUserList.jsp" method="post">
<tr>
    <td colspan="15" class="header">
商品管理
    </td>
</tr>
<tr>
    <td align="center" class="altbg1">
<b>商品编号</b>
    </td>
    <td align="center" class="altbg1">
<b>商品名称</b>
    </td>
    <td align="center" class="altbg1">
<b>商品商标</b>
    </td>
    <td align="center" class="altbg1">
<b>商品型号</b>
    </td>
    <td align="center" class="altbg1">
<b>商品价格</b>
    </td>
    <td align="center" class="altbg1">
<b>修改</b>
    </td>
    <td align="center" class="altbg1">
<b>删除</b>
    </td>
</tr>
<mytags:pagesproduct name="product" url="admin/manageProduct.jsp"></mytags:pagesproduct>
</table>
    </body>
</html>


至此,自定义标签已经开发完成,希望各位走过路过的大神能指点一二





分享到:
评论

相关推荐

    struts2+spring+hibernate分页,事务,自定义切面

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...

    struts2 + spring + hibernate + easyui 整合用户信息管理小案例

    系统搭建使用struts2 + spring + hibernate + easyui 整合的, 功能包括: 分页查询,自定义页面数据显示量,用户名模糊搜索,创建时间段,更新时间段内用户信息搜索,双击行进行编辑,多行选中删除,右键菜单已经写好...

    struts2+spring+hibernate分页显示

    总的来说,使用Struts2+Spring+Hibernate实现分页显示,需要综合运用这三个框架的核心特性,通过拦截器处理分页逻辑,Spring管理业务对象和事务,Hibernate处理数据查询。这个过程涉及到前端视图的构建、后端服务的...

    ext3+struts2+hibernate+spring的CRUD+分页

    同时,Struts2和Spring也可以配合提供分页支持,例如通过Action类中的方法返回分页信息,或者利用Spring的Pageable接口和Page对象。 在实际项目中,"sshext"的结构可能包含以下几个部分: 1. `WebRoot`:这是Web...

    Struts+Hibernate分页标签

    在处理大量数据时,为了提高用户体验,通常会采用分页显示数据,这就是所谓的"Struts+Hibernate分页标签"。在这个场景下,我们将深入探讨如何在Struts2框架中使用自定义标签来实现与Hibernate的整合,完成数据的分页...

    基于struts2 自定义标签 分页

    在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...

    spring+struts2+hibernate整合实现分页

    5. **Struts2的拦截器**:为了实现分页,我们可以创建一个自定义的Struts2拦截器,拦截请求并添加分页参数。拦截器可以检查URL中的页码参数,然后传递给Action。 6. **Hibernate的分页查询**:Hibernate提供`...

    jsp自定义标签+jpa+hibernate+struts2实现的分页

    本项目结合了JSP自定义标签、JPA(Java Persistence API)、Hibernate ORM框架以及Struts2框架,实现了高效且灵活的分页功能。下面我们将详细探讨这些技术及其在分页中的应用。 首先,JSP自定义标签(Custom Tags)...

    Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码)

    ### Struts2 + Spring2 + Hibernate3 经典分页技术解析 #### 一、概述 在企业级应用开发中,分页显示是常见的需求之一。对于数据量较大的查询结果,采用分页的方式不仅能减轻服务器的压力,提高用户体验,还能更好...

    基于Struts 2+Hibernate+Spring论坛系统源码

    Struts 2、Hibernate 和 Spring 是 Java Web 开发中的三个重要框架,它们组合在一起形成了一个强大的后端开发架构。这个基于 Struts 2+Hibernate+Spring 的论坛系统源码提供了学习和理解这些技术如何协同工作的实例...

    struts+spring+hibernate通用分页方法

    PageHelper是一个常用的Hibernate分页插件,它可以自动处理分页查询,我们只需在查询前调用`PageHelper.startPage()`设置分页参数即可。 最后,Struts2 Action会将Service返回的分页结果传递给视图层,通常使用JSP...

    struts2+hibernate增删改查+分页

    综上所述,"struts2+hibernate增删改查+分页"是一个基础的Java Web开发示例,它涵盖了MVC架构下,如何利用Struts2处理用户请求,通过Hibernate进行数据库操作,以及实现简单的分页功能。这种组合在实际项目中非常...

    struts2+hibernate+Spring后台表格分页

    4. **后台表格分页实现**:在实际应用中,通常会有一个专门的Service层方法处理分页请求,该方法先通过Hibernate查询数据,然后使用Spring的ModelMap或者自定义的Dto将数据打包返回给Struts2 Action。Action再将结果...

    网上购物车struts+spring+hibernate实现

    - **标签库**:Struts 提供了一系列自定义标签,如`&lt;s:form&gt;`、`&lt;s:textfield&gt;`等,简化了视图层的开发。 2. **Spring**: - **依赖注入(DI)**:Spring 提供了强大的依赖注入功能,使得组件间的依赖关系可以...

    struts+hibernate分页源码

    2. **Hibernate分页**: Hibernate提供了`Criteria`、`Query`接口以及`ScrollableResults`来实现分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以指定从哪一条数据开始获取,以及最多获取多少条数据,...

    Struts2+Hibernate3.2+spring2.0+sqlserver2000

    Struts2、Hibernate3.2、Spring2.0和SQL Server 2000是Java Web开发中的四个关键组件,它们构成了一个强大的企业级应用框架,通常被称为SSH2(Struts2、Spring2、Hibernate2)集成框架。下面将详细阐述这些技术以及...

    电影后台管理系统Spring+struts2+Hibernate+easyui

    电影后台管理系统是一个典型的Web应用程序,它使用了Spring、Struts2和Hibernate这三大框架,以及前端的EasyUI组件库来实现高效、稳定的管理功能。这个系统没有采用Maven作为项目构建工具,而是采取了传统的手动依赖...

    Struts+Hibernate+自定义标签的网上书店

    **Struts、Hibernate和自定义标签在构建网上书店系统中的应用** 本网上书店系统是一个基于MVC(Model-View-Controller)设计模式的Web应用程序,它整合了Java的两大核心框架——Struts和Hibernate,以及自定义标签...

    Struts1+Spring+hibernate《最新三国人物分页》

    在这个项目中,分页功能可能通过Struts1的拦截器或者自定义标签来实现,允许用户按页浏览三国人物的信息,提高用户体验。 项目文件`SanGuo`可能包含以下内容: 1. **源代码**:包括Struts1的Action类、Spring的配置...

Global site tag (gtag.js) - Google Analytics