`
xiaotian_ls
  • 浏览: 308240 次
  • 性别: 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;
 }
}

分享到:
评论

相关推荐

    mui.js实现分页功能

    在这个主题中,我们将深入探讨如何利用`mui.js`来实现分页功能,以及它与`jQuery`的关系。 首先,分页功能在网页应用中极为常见,特别是在数据量大、需要分批加载的场景下。`mui.js`提供了一个内置的分页组件,可以...

    js分页功能 js分页功能

    在大型数据展示或者列表展示时,为了提高用户体验,通常会采用分页功能来将大量数据分块显示,避免一次性加载过多内容导致页面响应慢或浏览器卡顿。本文将深入探讨JS实现分页功能的核心知识点。 1. **基础概念** -...

    jsp分页功能实现小程序

    总页数 = 总记录数 / 每页记录数,如果不能整除,则总页数加1。 3. **设计用户界面**:在JSP页面上,需要有导航元素,如页码链接或上一页/下一页按钮。这些元素可以通过循环和条件判断来动态生成。 4. **处理请求*...

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

    Python的Flask框架中实现分页功能的教程

    在`forms.py`文件中定义一个`PostForm`类,包含一个名为'post'的TextField,设置验证器为Required,确保用户输入的内容不能为空: ```python from flask_wtf import FlaskForm from wtforms import TextField from ...

    JSP分页功能

    在网页开发中,分页功能是一项非常重要的技术,它能够帮助用户更有效地浏览大量数据,如在电商网站的商品列表、论坛的帖子等场景。JSP(JavaServer Pages)作为Java Web开发的一种技术,提供了实现分页功能的方法。...

    用table绑定数据,实现分页功能

    在网页开发中,数据展示是不可或缺的一环,而当数据量较大时,为了提高用户体验,分页功能就显得尤为重要。本教程将详细讲解如何利用表格(Table)绑定数据并实现分页功能。我们将重点关注以下几个核心知识点: 1. ...

    分页:高度自定义分页

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

    DataGridview 简单的分页功能

    8. **用户体验**:提供用户友好的提示,如禁用不可用的分页按钮(如在首页时禁用“上一页”,在末页时禁用“下一页”),以及在分页操作期间显示加载指示器。 通过这些步骤,我们可以为`DataGridView`实现基本的...

    VB.NET 自定义有分页功能的Datagridview

    为了解决这个问题,开发者们通常会自定义控件,增加分页功能,就像"VB.NET 自定义有分页功能的Datagridview"这个项目所做的那样。 PageDatagridview是这个项目的核心,它是对标准DataGridView的扩展,增加了分页...

    自定义QTableWidget实现分页。

    在QT编程中,QTableWidget是一个非常常用的控件,用于展示二维数据,但它本身并不支持内置的分页功能。在处理大量数据时,这可能会导致性能问题,因为所有的数据都会一次性加载到内存中。为了解决这个问题,我们可以...

    JS+HTML分页代码

    本示例提供的"JS+HTML分页代码"是一个利用JavaScript(JS)和超文本标记语言(HTML)实现的分页功能,主要包含了首页、前页、后页、尾页以及自定义分页页号的功能。 **HTML基础**: HTML是网页的基础,用于构建页面...

    JS 实现web分页打印功能

    2. **分页控制**:默认情况下,浏览器会自动处理分页,但可能不完全符合我们的需求。我们可以通过CSS属性`page-break-after`和`page-break-before`来控制元素间的分页位置,避免内容被分割到不同页面。 ```css div....

    layui 简单实现 TABLE 分页功能

    在网页开发中,数据展示往往需要配合分页功能,以提高用户体验和加载速度。本篇文章将详细讲解如何使用 layui 实现 TABLE 的分页功能。 首先,我们需要确保已引入 layui 的 CSS 和 JS 文件。在 HTML 文件的 `&lt;head&gt;...

    c# datagridview分页功能实现 源码

    为解决这一问题,我们可以实现`DataGridView`的分页功能。本教程将通过源码分析,讲解如何利用`DataGridView`、`BindingNavigator`和`BindingSource`控件实现分页显示。 首先,我们需要了解`DataGridView`、`...

    asp分页,asp分页仿百度,asp分页大全

    在ASP中实现分页功能是常见的需求,特别是在处理大量数据列表时,分页能够提高用户体验,避免一次性加载过多内容导致页面加载缓慢。下面将详细探讨ASP分页的相关知识点。 一、分页的基本原理 分页主要是通过计算总...

    Java中GET表单传值分页搜索功能

    10. **状态管理**:由于GET请求会被浏览器缓存和记录在历史记录中,所以在设计分页功能时要考虑这些特性,避免用户无意中回到错误的页面状态。 通过以上知识点的综合运用,可以实现一个完整的Java中GET表单传值分页...

    JAVA分页实现JAVA+JS+HTML

    4. **响应式布局**:确保在不同设备和屏幕尺寸下,分页功能依然可用且布局合理。 在实际项目中,分页实现可能更为复杂,例如需要考虑性能优化,比如预加载相邻页数据,或者使用懒加载来减少初始加载时间。同时,...

    分页控件aspnet分页。很好用

    很好用"表明我们将讨论的是ASP.NET框架中的分页功能,它被描述为“很好用”,暗示了其易用性和高效性。 ASP.NET框架提供了一些内置的分页控件,如GridView、DataList和Repeater等,这些控件都支持分页功能。我们...

    利用js制作html table分页示例(js实现分页)

    标题所指的知识点为:利用JavaScript(简称js)技术来实现HTML...在实现分页功能时,还应关注代码的健壮性和用户的交互体验,确保在数据量巨大时分页也能高效运行,同时也要给用户提供友好的操作界面和明确的提示信息。

Global site tag (gtag.js) - Google Analytics