- 浏览: 308240 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
z390174504:
恩,确实,我也遇到了,好像是库冲突了,我在一个库项目中,单独引 ...
VerifyError: Error #1053: Illegal override of… -
cl1154781231:
您好,为什么使用tk-filter不用过滤*.gzip???我 ...
ExtJS使用gzip压缩 -
YY008871:
仅限ie下登录成功或失败吗?
单点登录—基于cookie的简单实现(IE) -
蛋的懒蛋:
不好用啊,IE7是运行了,但是就是一启动就报错了,接着就关了 ...
IE7绿色版下载-转载 -
fireinwind:
harman001 写道 ,为什么我的id大写同样没事啊!- ...
Spring配置文件中id的第二个字母不能大写问题
最近出了个问题,框架用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() + " ";
}
/**
* 显示一共有多少页
*/
private String viewTotalPage() throws IOException {
return langUtil.getLanguageString("page pagecount", language) + ":"
+ page.getPageCount() + " ";
}
/**
* 显示当前是第几页
*/
private String viewCurrentPage() throws IOException {
return langUtil.getLanguageString("page curpagenum", language) + ":"
+ page.getCurPageNum() + " ";
}
/**
* 显示当前是第几页/一共有多少页
*/
private String viewTotalAndCurrent() throws IOException {
return page.getCurPageNum() + " / " + page.getPageCount()
+ " ";
}
/**
* 显示每页有多少条记录
*/
private String viewPageSize() throws IOException {
return langUtil.getLanguageString("page pagesize", language) + ":"
+ page.getPageSize() + " ";
}
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(" \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(" \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(" \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(" \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(" <OPTION selected value=" + i + ">"
+ i + "</OPTION>\n");
} else {
gotoPage.append(" <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;
}
}
发表评论
-
奇怪的异常java.lang.ClassCastException: oracle.sql.CLOB
2012-03-20 17:08 1054Java代码 oracle. ... -
桌面图标下面的阴影怎么去掉
2009-04-10 17:30 2642电脑|属性|高级|性能项 ... -
initialize the log4j system prop问题解决办法
2009-04-01 09:01 2350log4j:WARN Please initialize th ... -
tomcat无法启动
2009-03-18 13:52 1268查看log: This release of Apache T ... -
Could not find action or result struts2
2009-03-07 11:22 7592No result defined for action co ... -
oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
2009-02-27 10:13 2487导入过程中,所有表导入都出现提示, 正在跳过表。。。某某表名 ... -
Dynamic Performance Tables not accessible.......
2009-02-20 17:17 1372Dynamic Performance Tables ... -
Cannot find specified temporary folder -----tomcat
2009-01-21 13:09 37741.tomcat配置 eclipse Window---> ... -
EJB-------data too long for column ..... text
2009-01-17 16:48 1633有个EJB3的例子是gbk的,我改成utf8,前台jsp,数据 ...
相关推荐
在这个主题中,我们将深入探讨如何利用`mui.js`来实现分页功能,以及它与`jQuery`的关系。 首先,分页功能在网页应用中极为常见,特别是在数据量大、需要分批加载的场景下。`mui.js`提供了一个内置的分页组件,可以...
在大型数据展示或者列表展示时,为了提高用户体验,通常会采用分页功能来将大量数据分块显示,避免一次性加载过多内容导致页面响应慢或浏览器卡顿。本文将深入探讨JS实现分页功能的核心知识点。 1. **基础概念** -...
总页数 = 总记录数 / 每页记录数,如果不能整除,则总页数加1。 3. **设计用户界面**:在JSP页面上,需要有导航元素,如页码链接或上一页/下一页按钮。这些元素可以通过循环和条件判断来动态生成。 4. **处理请求*...
使用Spring的JdbcTemplate实现分页功能
在`forms.py`文件中定义一个`PostForm`类,包含一个名为'post'的TextField,设置验证器为Required,确保用户输入的内容不能为空: ```python from flask_wtf import FlaskForm from wtforms import TextField from ...
在网页开发中,分页功能是一项非常重要的技术,它能够帮助用户更有效地浏览大量数据,如在电商网站的商品列表、论坛的帖子等场景。JSP(JavaServer Pages)作为Java Web开发的一种技术,提供了实现分页功能的方法。...
在网页开发中,数据展示是不可或缺的一环,而当数据量较大时,为了提高用户体验,分页功能就显得尤为重要。本教程将详细讲解如何利用表格(Table)绑定数据并实现分页功能。我们将重点关注以下几个核心知识点: 1. ...
2.3.使用在开发过程中由于使用到了分页功能,在这里写了一个分页功能。 3.按钮选择 之前的很多按钮是通过参数进行选择,这样不利于平时对按钮进行学习和了解 使用在这里使用按钮都使用button元素进行创建(注释即...
8. **用户体验**:提供用户友好的提示,如禁用不可用的分页按钮(如在首页时禁用“上一页”,在末页时禁用“下一页”),以及在分页操作期间显示加载指示器。 通过这些步骤,我们可以为`DataGridView`实现基本的...
为了解决这个问题,开发者们通常会自定义控件,增加分页功能,就像"VB.NET 自定义有分页功能的Datagridview"这个项目所做的那样。 PageDatagridview是这个项目的核心,它是对标准DataGridView的扩展,增加了分页...
在QT编程中,QTableWidget是一个非常常用的控件,用于展示二维数据,但它本身并不支持内置的分页功能。在处理大量数据时,这可能会导致性能问题,因为所有的数据都会一次性加载到内存中。为了解决这个问题,我们可以...
本示例提供的"JS+HTML分页代码"是一个利用JavaScript(JS)和超文本标记语言(HTML)实现的分页功能,主要包含了首页、前页、后页、尾页以及自定义分页页号的功能。 **HTML基础**: HTML是网页的基础,用于构建页面...
2. **分页控制**:默认情况下,浏览器会自动处理分页,但可能不完全符合我们的需求。我们可以通过CSS属性`page-break-after`和`page-break-before`来控制元素间的分页位置,避免内容被分割到不同页面。 ```css div....
在网页开发中,数据展示往往需要配合分页功能,以提高用户体验和加载速度。本篇文章将详细讲解如何使用 layui 实现 TABLE 的分页功能。 首先,我们需要确保已引入 layui 的 CSS 和 JS 文件。在 HTML 文件的 `<head>...
为解决这一问题,我们可以实现`DataGridView`的分页功能。本教程将通过源码分析,讲解如何利用`DataGridView`、`BindingNavigator`和`BindingSource`控件实现分页显示。 首先,我们需要了解`DataGridView`、`...
在ASP中实现分页功能是常见的需求,特别是在处理大量数据列表时,分页能够提高用户体验,避免一次性加载过多内容导致页面加载缓慢。下面将详细探讨ASP分页的相关知识点。 一、分页的基本原理 分页主要是通过计算总...
10. **状态管理**:由于GET请求会被浏览器缓存和记录在历史记录中,所以在设计分页功能时要考虑这些特性,避免用户无意中回到错误的页面状态。 通过以上知识点的综合运用,可以实现一个完整的Java中GET表单传值分页...
4. **响应式布局**:确保在不同设备和屏幕尺寸下,分页功能依然可用且布局合理。 在实际项目中,分页实现可能更为复杂,例如需要考虑性能优化,比如预加载相邻页数据,或者使用懒加载来减少初始加载时间。同时,...
很好用"表明我们将讨论的是ASP.NET框架中的分页功能,它被描述为“很好用”,暗示了其易用性和高效性。 ASP.NET框架提供了一些内置的分页控件,如GridView、DataList和Repeater等,这些控件都支持分页功能。我们...
标题所指的知识点为:利用JavaScript(简称js)技术来实现HTML...在实现分页功能时,还应关注代码的健壮性和用户的交互体验,确保在数据量巨大时分页也能高效运行,同时也要给用户提供友好的操作界面和明确的提示信息。