- 浏览: 299740 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
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 1008Java代码 oracle. ... -
桌面图标下面的阴影怎么去掉
2009-04-10 17:30 2607电脑|属性|高级|性能项 ... -
initialize the log4j system prop问题解决办法
2009-04-01 09:01 2311log4j:WARN Please initialize th ... -
tomcat无法启动
2009-03-18 13:52 1235查看log: This release of Apache T ... -
Could not find action or result struts2
2009-03-07 11:22 7560No result defined for action co ... -
oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
2009-02-27 10:13 2417导入过程中,所有表导入都出现提示, 正在跳过表。。。某某表名 ... -
Dynamic Performance Tables not accessible.......
2009-02-20 17:17 1321Dynamic Performance Tables ... -
Cannot find specified temporary folder -----tomcat
2009-01-21 13:09 37191.tomcat配置 eclipse Window---> ... -
EJB-------data too long for column ..... text
2009-01-17 16:48 1596有个EJB3的例子是gbk的,我改成utf8,前台jsp,数据 ...
相关推荐
使用Spring的JdbcTemplate实现分页功能
AspNetPager支持使用主题(Theme)与皮肤(Skin)统一控件的整体样式,配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行代码,甚至无需编写任何代码,只需设置几个属性就可以实现分页功能。...
2.3.使用在开发过程中由于使用到了分页功能,在这里写了一个分页功能。 3.按钮选择 之前的很多按钮是通过参数进行选择,这样不利于平时对按钮进行学习和了解 使用在这里使用按钮都使用button元素进行创建(注释即...
dom转化为表格显示源码,并且有很强大的分页功能,搭上就能用
用js操作DOM来实现的分页!绝对的有用,只需改改就能变出很多的花样!
web项目中大多数分页是通过后台操作的,但是有的时候也是需要在前台进行分页操作,此代码就是用js做的分页
找了三天才找到合适会用的gridview自定义分页功能,之前找了n多种方法,没一个能用的,直到现在这个才真正的在自己的网页上用上。现在上传上来给有需要的朋友一个方便,2分的资源分只是想借朋友的一点力积点分方便...
关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...
用vuejs实现表格的模糊查询,下拉框选择表格的分类,表格对应的列显示分类,以及点击某列内容进行跳转,以及分页的上一页下一页功能,和最后一页不能选择
这个是关于分页的Demo,希望能帮到大家,很好用
首先分配一片较大的内存空间,作为程序运行的可用存储空间; 建立应用程序的模型; 建立进程的基本数据结构及相应算法 建立管理存储空间的基本存储结构。 建立管理分页的基本数据结构与算法。 设计存储空间的分配与...
3、一些朋友也研究过这个问题,不少是用MoveBy加计算实现的,不过研究得再深入也不能改变ADO本身的运行机制;分页功能是ADO自带的,既然它本身有这个功能,何乐而不为? 注:为了大家使用方便,此程序用到的原生ADO...
再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 2013年3月8号 修复了很多bug 调整了源代码 ...///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制 分页控件详情请看内置文档
关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页...
angularJS写的分页功能,亲测可用 有问题可以联系我
react 使用 antd 实现分页功能 本人写的笔记简单可用 亲测实现 ,有疑问可以留言交流
3、分页功能:aop实现默认分页赋值。 4、统一结果返回。 5、策略工厂模式:用于不同业务逻辑的实现。 6、uid生成工具。 7、集成swagger在线接口文档。 8、文件上传功能。 9、excel文件解析功能:poi实现。 10、minio...
EXT 3.0 + SERVLET 开发的EXT树表分页功能. 包里包括了工程相关的所有东西(包括引用的EXT) 下载后部署就可用.
连续的分配方式会形成许多碎片,虽然通过紧凑的方法将血多碎片拼接成可用的大块空间 但须付出很大的开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需紧凑。基于这一思想产生了离散分配方式。...
很实用的php分页类 功能很强大 简单的调用方法 只要你稍微会PHP和SQL知识 都能用