如何用把Arraylist中的结果在jsp页面中用分页显示?java+jsp语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用把Arraylist中的结果在jsp页面中用分页显示?java+jsp语言相关的知识,希望对你有一定的参考价值。

我后台的一个servlet已经将一堆数据放到了一个ArrayList中,并把它传给了前台jsp页面,下面该如何用分页的技术把结果以表格的形式显示出来?假设我后台穿过来的ArrayList的名字叫做Student,里面包含了各种各样的get(),set()方法,请把代码发给我。实现的越简单越好,不用strus,越简单越好,最好把表格每两个记录设置不同的颜色,有追加分数。在线等!

我靠!假分页有个屁用。ie扛不住那么多数据的。
这样的思路好点:
1.提交差查询关键字,这里面就直接包含查询第几页
2.查询回来的结果集显示在页面上

这里有一个分页的存储过程,你用吧。
CREATE PROC sp_PageView
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小(记录数)
@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
--用于指定排序顺序
@Where nvarchar(1000)='', --查询条件
@PageCount int OUTPUT --总页数
AS
SET NOCOUNT ON
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END

--分页字段检查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END

--其他参数检查及规范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'

--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF @PageCount IS NULL
BEGIN
DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @PageCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END

--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=(@PageCurrent-1)*@PageSize

--第一页直接显示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
--处理别名
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'

--生成主键(惟一键)处理条件
DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
@s nvarchar(1000),@Field sysname
SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
WHILE CHARINDEX(N',',@s)>0
SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
@Where=REPLACE(@Where,@Field,N'a.'+@Field),
@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
@Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
@Where2=CASE
WHEN @Where='' THEN N'WHERE ('
ELSE @Where+N' AND ('
END+N'b.'+@s+N' IS NULL'+@Where2+N')'

--执行查询
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' a LEFT JOIN(SELECT TOP '+@TopN1
+N' '+@FieldKey
+N' FROM '+@tbname
+N' a '+@Where
+N' '+@FieldOrder
+N')b ON '+@Where1
+N' '+@Where2
+N' '+@FieldOrder)
END追问

不用假分页啊,能不能提供一下javascript代码,万分感激

参考技术A 你这种做法本身是不可取的,你都做的是后台取数据了,一次就取一页就好了,取那么多干嘛?如果是后台取了一页就用jstl标签或者jsp标签做迭代输出就好了。
如果你一次取了所有数据,那么就只能借助javascript做分页输出了。做法就不这里敲了,给你说原理吧。就是先输出到页面的javascript块中,模拟你的输出为javascript的数组,然后用javascript来分批循环显示.追问

我想知道的就是如何分批循环显示?我想要那段代码

追答

假设你的数组时0~99共100个。每页显示20条,那么根据当前第几页计算这页的数据位置,公式为:(当前页-1)*20 = 当前页起始数组下标
默认显示第一页,那么就循环0~19即 1-1*20 = 0开始。
假设当前行号变量为pageNum,起始位置为pageStart;
pageStart = (pageNum - 1) * 20;
for(idx = pageStart; idx < (pageStart + 20);idx ++)
//这里就输出咯

jsp页面函数中如何获取sevlet传过来的List

然后要从List中取出数据库表的内容
你好~~ 能讲具体一点么 ,我想在for循环里面对某些字段进行判断 另外没有用struts

request.getAttribute(变量名)

不过你先要在servlet中把变量保存在一个变量名中
用request.setAttribute(变量名,要保存的变量);
在servlet中用request跳转到页面中.例如:a.jsp

在a.jsp中用request.getAttribute(变量名)获取list

取出list中的内容用for循环
然后用<%= %>显示
参考技术A 如果单纯的使用小脚本,就在<% %>中使用for循环遍历,并配合<%= %>输出,输出时可以配合HTML代码控制格式,如果使用Struts标签,直接<logic:foreach>循环就可以了 参考技术B List list = (List) session.getAttribute("dispList");//取得list
ResultWork1 resultWork1 = null; //ResultWork1 类
if (list == null)
System.out.println("没有数据");
else
for (int i = 0; i < list.size(); i++)
resultWork1 = (ResultWork1) list.get(i);//取得一个类
id = resultWork1.getId().toString();//取得id
System.out.println("有数据");

参考技术C List list = (List) session.getAttribute("dispList");//取得list
ResultWork1 resultWork1 = null; //ResultWork1 类
if (list == null)
System.out.println("没有数据");
else
for (int i = 0; i < list.size(); i++)
resultWork1 = (ResultWork1) list.get(i);//取得一个类
id = resultWork1.getId().toString();//取得id
System.out.println("有数据");

以上是关于如何用把Arraylist中的结果在jsp页面中用分页显示?java+jsp语言的主要内容,如果未能解决你的问题,请参考以下文章

用struts2标签在jsp页面中取得list的第一个元素

如何用jsp显示数据库中的数据

商务系统的构造思路(无源码!)+如何用jsp实现点击单选框内容显示在另一个jsp页面

jsp页面中用<jsp:forward>跳转登陆的页面,如果登陆成功就是跳转到manage.jsp中,结果地址栏上的地址没变。

jsp里面如何用forEach取一个数组里面的值,从而实现一个下拉列表

jsp如何用My97日期控件