`
xiaotian_ls
  • 浏览: 299740 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

分页功能不可用

阅读更多

最近出了个问题,框架用ssh,可是分页有问题,页面属性无法传到action中,后来发现有两个同名的属性,所以action中得不到值.

代码:

 

web.xml

 

<jsp-config>
  <taglib>
   <taglib-uri>/tag/eoms-taglib</taglib-uri>
   <taglib-location>/WEB-INF/tld/common.tld</taglib-location>
  </taglib>
</jsp-config>

 

common.tld

 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>eoms</short-name>
 <uri>/tag/eoms-taglib</uri>
 <display-name>Eoms Taglib</display-name>
 <description>Eoms Taglib</description>
 <tag>
  <name>page</name>
  <tag-class>com.common.taglibs.PageTag</tag-class>
  <body-content>JSP</body-content>
  <description></description>
  <attribute>
   <name>name</name>
   <required>true</required>
   <rtexprvalue>false</rtexprvalue>
  </attribute>
  <attribute>
   <name>order</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>image</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>para</name>
   <required>false</required>
   <rtexprvalue>false</rtexprvalue>
  </attribute>
 </tag>
</taglib>

 

PageTag.java

 

package com.common.taglibs;

import java.io.IOException;
import java.util.Enumeration;
import java.util.StringTokenizer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

import org.springframework.web.context.WebApplicationContext;

import com.common.organize.user.UserSession;
import com.common.util.Page;
import com.common.LanguageUtil;

public class PageTag extends TagSupport {

 private static final long serialVersionUID = 2L;

 protected String name;// Page对象的名字

 protected boolean image = true;// 是否显示图片

 protected int order = 0;// 用于指定显示风格

 protected Page page;

// private String currentUrl;// 当前页的URL
 
 private boolean para = true;

 HttpServletRequest request = null;

 LanguageUtil langUtil = null;// 语言工具

 String language = "";// 语言

 public int doEndTag() throws JspException {
  request = (HttpServletRequest) pageContext.getRequest();
  page = (Page) request.getAttribute(name);// Page对象
  if (page == null)
   page = Page.EMPTY_PAGE;
  WebApplicationContext appContext = (WebApplicationContext) pageContext
    .getServletContext()
    .getAttribute(
      WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

  langUtil = (LanguageUtil) appContext.getBean("sysLanguageUtil");
  language = UserSession.getLanguagePrefernce(request);
//  currentUrl = request.getRequestURL().toString();
  try {
   //--------add
   pageContext.getOut().print(printSubmitJS());

   if (para){
    pageContext.getOut().print(printHiddenField());
    //pageContext.getOut().print(getParamsFromCurrentURL(request, "start,size"));
   }
   //++++++++
   pageContext.getOut().print(viewPage());
  } catch (IOException ex) {
   throw new JspTagException(ex.getMessage());
  }

  return EVAL_PAGE;
 }

 /**
  * 取得分页的标签
  *
     * 按指定形式显示分页内容
  * order为0,
  * 表示完整形式,按如下顺序显示:
  * 共计:18 分页:2 当前页:1 每页:10 首页 前页 后页 尾页 转到□
  * order为1,
  * 表示简洁形式,按如下顺序显示:
  * 前页 后页 尾页 1/2
  * order为2,
  * 表示完整形式2,按如下顺序显示:
  * 共计:18 每页:10 转到□ 首页 前页 后页 尾页 1/2
  * @return 分页html
  */
 public String viewPage() {
  StringBuffer viewPage = new StringBuffer();
  try {
   switch (order) {
   case 1:
    viewPage.append(viewFirstPage()).append(viewPreviousPage())
      .append(viewNextPage()).append(viewLastPage()).append(
        viewTotalAndCurrent());
    break;
   case 2:
    viewPage.append(viewTotal()).append(viewPageSize()).append(
      viewGotoPage()).append(viewFirstPage()).append(
      viewPreviousPage()).append(viewNextPage()).append(
      viewLastPage()).append(viewTotalAndCurrent());
    break;
   default:
    viewPage.append(viewTotal()).append(viewTotalPage()).append(
      viewCurrentPage()).append(viewPageSize()).append(
      viewFirstPage()).append(viewPreviousPage()).append(
      viewNextPage()).append(viewLastPage()).append(
      viewGotoPage());
    break;
   }

  } catch (IOException e) {
   e.printStackTrace();
  }
  return viewPage.toString();
 }

 /**
  * 显示一共有多少条记录
  */
 private String viewTotal() {
  return langUtil.getLanguageString("page totalsize", language) + ":"
    + page.getTotalSize() + "&nbsp;&nbsp;";
 }

 /**
  * 显示一共有多少页
  */
 private String viewTotalPage() throws IOException {
  return langUtil.getLanguageString("page pagecount", language) + ":"
    + page.getPageCount() + "&nbsp;&nbsp;";
 }

 /**
  * 显示当前是第几页
  */
 private String viewCurrentPage() throws IOException {
  return langUtil.getLanguageString("page curpagenum", language) + ":"
    + page.getCurPageNum() + "&nbsp;&nbsp;";
 }

 /**
  * 显示当前是第几页/一共有多少页
  */
 private String viewTotalAndCurrent() throws IOException {
  return page.getCurPageNum() + "&nbsp;/&nbsp;" + page.getPageCount()
    + "&nbsp;&nbsp;";
 }

 /**
  * 显示每页有多少条记录
  */
 private String viewPageSize() throws IOException {
  return langUtil.getLanguageString("page pagesize", language) + ":"
    + page.getPageSize() + "&nbsp;&nbsp;";
 }
 private String printSubmitJS() {
  StringBuffer js = new StringBuffer();
  js.append("<SCRIPT LANGUAGE=\"JavaScript\">\n").append(
    "function submitFormPage(start,size){\n").append(
    "if(document.forms[0].start){\n").append(
    "document.forms[0].start.value=start;\n").append(
    "}\n").append(
    "if(document.forms[0].size){\n").append(
    "document.forms[0].size.value=size;\n").append(
    "}\n").append(
    "document.forms[0].submit();\n").append("}\n").append(
    "</SCRIPT>\n");
  return js.toString();
 }
 /**
  * 显示首页
  */
 private String viewFirstPage() {
  StringBuffer firstPage = new StringBuffer();

  firstPage.append("<span style=\"cursor:hand\" onclick=\"submitFormPage('0','")
  .append(page.getPageSize()).append("');\">");
  if (image) {
   firstPage.append("<img src=").append(getImageDir())
     .append("first.gif>");
  } else {
   firstPage
     .append(langUtil.getLanguageString("page first", language));

  }
  firstPage.append("</span>");
  firstPage.append("&nbsp;\n");
  return firstPage.toString();
 }

 /**
  * 显示上一页
  */
 private String viewPreviousPage() {
  StringBuffer previousPage = new StringBuffer();
  if (page.hasPreviousPage()) {

   previousPage.append(
     "<span style=\"cursor:hand\" onclick=\"submitFormPage('")
     .append(page.getStartOfPreviousPage()).append("','")
     .append(page.getPageSize()).append("');\">");

   if (image) {
    previousPage.append("<img src=").append(getImageDir()).append(
      "previous.gif>");

   } else {
    previousPage.append("上一页");
   }
   previousPage.append("</span>");
  }

  previousPage.append("&nbsp;\n");
  return previousPage.toString();
 }

 /**
  * 显示下一页
  */
 private String viewNextPage() {
  StringBuffer nextPage = new StringBuffer();
  if (page.hasNextPage()) {
   nextPage.append(
     "<span style=\"cursor:hand\" onclick=\"submitFormPage('")
     .append(page.getStartOfNextPage()).append("','").append(
       page.getPageSize()).append("');\">");

   if (image) {
    nextPage.append("<img src=").append(getImageDir()).append(
      "next.gif>");

   } else {
    nextPage.append("下一页");
   }
   nextPage.append("</span>");
  }

  nextPage.append("&nbsp;\n");
  return nextPage.toString();
 }

 /**
  * 显示尾页
  */
 private String viewLastPage() {
  StringBuffer lastPage = new StringBuffer();
  int start = 0;
  if (page.getPageCount() == 0) {
   start = 0;
  } else {
   start = page.getPageSize() * (page.getPageCount() - 1);
  }

  lastPage.append(
    "<span style=\"cursor:hand\" onclick=\"submitFormPage('")
    .append(start).append("','").append(page.getPageSize()).append(
      "');\">");

  if (image) {
   lastPage.append("<img src=").append(getImageDir()).append(
     "last.gif>");
  } else {
   lastPage.append("尾页");

  }
  lastPage.append("</span>");
  lastPage.append("&nbsp;\n");
  return lastPage.toString();

 }

 /**
  * 显示转到第几页
  */
 private String viewGotoPage() {
  StringBuffer gotoPage = new StringBuffer();
  gotoPage
    .append("转到")
    .append(
      "<SELECT name=\"jumpPage\" onchange=\"JumpingPage('window',this,0)\">\n");
  for (int i = 1; i <= page.getPageCount(); i++) {
   if (i == page.getCurPageNum()) {
    gotoPage.append("&nbsp;&nbsp;<OPTION selected value=" + i + ">"
      + i + "</OPTION>\n");
   } else {
    gotoPage.append("&nbsp;&nbsp;<OPTION value=" + i + ">" + i
      + "</OPTION>\n");
   }
  }
  gotoPage.append("</SELECT>\n");
  // 定义javascript方法JumpingPage()
  gotoPage
    .append("<SCRIPT LANGUAGE=\"JavaScript\">\n")
    .append("function JumpingPage(targ,selObj,restore){\n")
    .append(
      " var start=eval((selObj.options[selObj.selectedIndex].value-1)*")
    .append(page.getPageSize()).append(");\n").append(
      "submitFormPage(start,'").append(page.getPageSize())
    .append("');\n");
  gotoPage.append("  if (restore) selObj.selectedIndex=0;\n");
  gotoPage.append("  return ;\n");
  gotoPage.append("}\n");
  gotoPage.append("</SCRIPT>\n");
  return gotoPage.toString();
 }
 /**
  * 打印隐藏域
  *
  * @return
  */
 private String printHiddenField() {
  StringBuffer hidden = new StringBuffer();
  hidden.append("<input type='hidden' name='start' value=''/>\n").append(
    "<input type='hidden' name='size' value=''/>\n");
  return hidden.toString();
 }
 /**
  * 从URL中获取参数
  *
  * @param: request 客户端请求
  * @param: exceptionParamNames 排除在外的参数
  */
 private static String getParamsFromCurrentURL(HttpServletRequest request,
   String exceptionParamNames) {
  StringBuffer params = new StringBuffer();
  Enumeration e = request.getParameterNames();
  outer: while (e.hasMoreElements()) {
   String key = (String) e.nextElement();
   StringTokenizer st = new StringTokenizer(exceptionParamNames, ",");
   while (st.hasMoreTokens()) {
    String exceptionName = st.nextToken();
    if (key.equals(exceptionName)) {
     continue outer;
    }
   }
   String value = request.getParameter(key);
   // 修正存在空格的bug.
   value = value.trim();
   params.append("<input type='hidden' name='").append(key).append(
     "' value='").append(value).append("'/>\n");
  }
  return params.toString();
 }
 
 /**
  * @return
  */
 private String getImageDir(){
  String contextPath = request.getContextPath();
  String curSkin = UserSession.getSkinPrefernce(request);
  return contextPath+"/eoms-skins/"+curSkin+"/images/";
 }

 public void setName(String name) {
  this.name = name;
 }

 public void setImage(String image) {
  this.image = "true".equals(image);
 }

 public void setOrder(String order) {
  if (order == null || "".equals(order))
   this.order = 0;
  else
   this.order = new Integer(order).intValue();

 }

 public boolean isPara() {
  return para;
 }

 public void setPara(boolean para) {
  this.para = para;
 }
}

 

Page.java

 

package com.common.util;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * 查询显示页面数据类,用来存放分页查询中每一页的数据.
 * <p>s
 * 页面数据类用来存放查询翻页过程中的数据,里面存放指定条数的数据,数据中包含哪了结果集中的部分数据。<br>
 * 页面数据类中包含数据信息以及页面属性信息,其中包括开始的记录数和总记录数,页面大小等信息.
 *
 *
 */

public class Page implements Serializable {

 public static int DEFAULTPAGESIZE = 10;

 private static final long serialVersionUID = 1L;

 public static final Page EMPTY_PAGE = new Page(Collections.EMPTY_LIST, 0,
   0, 0);

 // 结果数据列表
 private List resultList = null;

 // 页面开始记录数
 private int start = 0;

 // 结果总记录数
 private int totalSize = 0;

 // 页面数据大小.
 private int pageSize = DEFAULTPAGESIZE;

 /**
  * 通过给定的参数构建页面数据对象.
  *
  * @param resultList
  *            结果集数据列表
  * @param start
  *            数据集中第一个数据对象的编号.
  * @param totalSize
  *            总的数据记录数
  * @param pageSize
  *            页面数据大小
  */
 public Page(List resultList, int start, int pageSize, int totalSize) {
  this.resultList = resultList;
  this.start = start;
  this.totalSize = totalSize;
  this.pageSize = pageSize;
 }

 /**
  * 当前页面对象是否存在下一个页面对象.
  *
  * @return boolean 是否存在下一个页面对象
  */
 public boolean hasNextPage() {
  return (start + resultList.size()) < totalSize;
 }

 /**
  * 当前页面对象是否存在前一个页面对象.
  *
  * @return boolean 是否存在前一个页面对象
  */
 public boolean hasPreviousPage() {
  return start > 0;
 }

 /**
  * 当前页面对象的下一个页面对象的数据记录编号.
  *
  * @return int 下一个页面对象的数据记录编号.
  */
 public int getStartOfNextPage() {
  return start + resultList.size();
 }

 /**
  * 取得当前页面对象的前一个对象页数.
  *
  * @return int 前一个对象页数
  */
 public int getStartOfPreviousPage() {
  return Math.max(start - pageSize, 0);
 }

 /**
  * 取得总页数.
  *
  * @return int 总页数
  */
 public int getPageCount() {
  int ret = 0;
  if (pageSize > 0) {
   if (totalSize % pageSize == 0) {
    ret = totalSize / pageSize;
   } else {
    ret = totalSize / pageSize + 1;
   }

  }

  return ret;
 }

 /**
  * 取得当前页数.
  *
  * @return int 当前页数
  */
 public int getCurPageNum() {
  int ret = 0;
  if (pageSize > 0)
   ret = start / pageSize + 1;
  return ret;
 }

 /**
  * 取得当前页数对象的数据列表的数据大小.
  *
  * @return int 数据大小
  */
 public int getSize() {
  return resultList.size();
 }

 /**
  * 取得页面数据的大小.
  *
  * @return int 页数
  */
 public int getPageSize() {
  return pageSize;
 }

 /**
  * 设置页面数据的大小.
  *
  * @param pageSize
  */
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

 /**
  * 取得当前页面数据中的数据列表.
  *
  * @return List 数据列表
  */
 public List getResultList() {
  return resultList;
 }

 /**
  * 设置数据对象中的数据列表.
  *
  * @param resultList
  */
 public void setResultList(List resultList) {
  this.resultList = resultList;
 }

 /**
  * 取得当前页数据对象的第一个数据的编号.
  *
  * @return int 第一个数据的编号
  */
 public int getStart() {
  return start;
 }

 /**
  * 设置当前页数据对象的第一个对象的数据的编号.
  *
  * @param start
  */
 public void setStart(int start) {
  this.start = start;
 }

 /**
  * 取得所有数据的总记录数.
  *
  * @return int 所有数据的总记录数
  */
 public int getTotalSize() {
  return totalSize;
 }

 /**
  * 设置数据的总记录数.
  *
  * @param totalSize
  */
 public void setTotalSize(int totalSize) {
  this.totalSize = totalSize;
 }
}

分享到:
评论

相关推荐

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

    能用漂亮分页控件及Demo源码

    AspNetPager支持使用主题(Theme)与皮肤(Skin)统一控件的整体样式,配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行代码,甚至无需编写任何代码,只需设置几个属性就可以实现分页功能。...

    分页:高度自定义分页

    2.3.使用在开发过程中由于使用到了分页功能,在这里写了一个分页功能。 3.按钮选择 之前的很多按钮是通过参数进行选择,这样不利于平时对按钮进行学习和了解 使用在这里使用按钮都使用button元素进行创建(注释即...

    Dom生成表格和实现分页源码

    dom转化为表格显示源码,并且有很强大的分页功能,搭上就能用

    用js操作DOM来实现的分页

    用js操作DOM来实现的分页!绝对的有用,只需改改就能变出很多的花样!

    前台页面使用js分页

    web项目中大多数分页是通过后台操作的,但是有的时候也是需要在前台进行分页操作,此代码就是用js做的分页

    .net的GRIDVIEW自定义分页功能

    找了三天才找到合适会用的gridview自定义分页功能,之前找了n多种方法,没一个能用的,直到现在这个才真正的在自己的网页上用上。现在上传上来给有需要的朋友一个方便,2分的资源分只是想借朋友的一点力积点分方便...

    ListView实现分页功能【附Demo源码】

    关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...

    vue实现表格的查询,下拉框,以及分页功能

    用vuejs实现表格的模糊查询,下拉框选择表格的分类,表格对应的列显示分类,以及点击某列内容进行跳转,以及分页的上一页下一页功能,和最后一页不能选择

    java 实现分页功能

    这个是关于分页的Demo,希望能帮到大家,很好用

    操作系统课程设计报告 分页存储管理系统

    首先分配一片较大的内存空间,作为程序运行的可用存储空间; 建立应用程序的模型; 建立进程的基本数据结构及相应算法 建立管理存储空间的基本存储结构。 建立管理分页的基本数据结构与算法。 设计存储空间的分配与...

    ADO分页显示源代码

    3、一些朋友也研究过这个问题,不少是用MoveBy加计算实现的,不过研究得再深入也不能改变ADO本身的运行机制;分页功能是ADO自带的,既然它本身有这个功能,何乐而不为? 注:为了大家使用方便,此程序用到的原生ADO...

    .net50个常用方法简单华丽的分页控件功能大的分页控件 50个实用方法

    再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 2013年3月8号 修复了很多bug 调整了源代码 ...///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制 分页控件详情请看内置文档

    ListView分页功能源码.zip

    关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...

    angularJS 分页

    angularJS写的分页功能,亲测可用 有问题可以联系我

    react 分页案列.doc

    react 使用 antd 实现分页功能 本人写的笔记简单可用 亲测实现 ,有疑问可以留言交流

    minio使用,poi解析,uid生成工具,策略工厂模式,模板管理完整功能,swagger集成,跨域,异常处理,分页等可用源代码

    3、分页功能:aop实现默认分页赋值。 4、统一结果返回。 5、策略工厂模式:用于不同业务逻辑的实现。 6、uid生成工具。 7、集成swagger在线接口文档。 8、文件上传功能。 9、excel文件解析功能:poi实现。 10、minio...

    EXT树表分页(SERVLET)

    EXT 3.0 + SERVLET 开发的EXT树表分页功能. 包里包括了工程相关的所有东西(包括引用的EXT) 下载后部署就可用.

    分页管理(操作系统分页存储管理,模拟多进程内存动态分配)

    连续的分配方式会形成许多碎片,虽然通过紧凑的方法将血多碎片拼接成可用的大块空间 但须付出很大的开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需紧凑。基于这一思想产生了离散分配方式。...

    PHP分页类 php分页代码

    很实用的php分页类 功能很强大 简单的调用方法 只要你稍微会PHP和SQL知识 都能用

Global site tag (gtag.js) - Google Analytics