`
lgx2351
  • 浏览: 175885 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

构造结果集实现类似grid显示

阅读更多

在做应用开发中,最经常的操作是到后台数据库去获取数据,在前台用自定义grid标签来显示数据。对自定义标签不是很了解的初学者可能对自定义grid的实现有些迷惑,不知道数据库取出来的数据是怎么显示在自定义grid里的。其实,实现的过程是:把从数据取出来的结果集放在request里,自定义标签里说白了就是对这个结果集进行构造成<table><tr><td></td></tr></table>的形式显示出来就可以了。

在这里,我们不考虑自定义标签的实现,就只是把整个从后台读数据到前台显示的过程说一下。

一、前台部份:

<table width="100%" border="1" bordercolor="#708090" cellspacing="0" cellpadding="0">   
	<tr style="background-color: #BDD3E7;">   
		<td>标题</td>   
		<td>内容</td>   
		<td>时间</td>   
		<td>操作</td>   
	</tr>   
	<logic:notEmpty name="GenBanRec">   
		<logic:iterate id="element" name="GenBanRec">   
			<tr>   
			<td style="color: #0B4A8D;width: 130px;">   
				<%=((Hashtable) element).get("GEN_BAN_TITLE")%>   
			</td>   
			<td style="color: #0B4A8D;">   
				<%=((Hashtable) element).get("GEN_BAN_CONT")%>   
			</td>   
			<td style="color: #778899;width: 100px;">   
				<%=((Hashtable) element).get("UPDATE_DATE")%>   
			</td>   
			<td style="width:40px;">   
				<input type="button" id="genBanLocate" value="定位"/>   
			</td>   
			</tr>   
		</logic:iterate>   
		<table align="right">   
		<tr>   
		<td>   
		 <input type="button" value="上一页" class="button" name="btnpre" disabled="true" onclick="basicOpr.toPage(1);"  
		</td>   
		<td>   
		 <input type="button" value="下一页" class="button" name="btnnext" onclick="basicOpr.toPage(2);"  
		</td>   
		</tr>   
		</table>   
	</logic:notEmpty>   
	<logic:empty name="GenBanRec">   
	<p>已到最后一页!</p>   
	<table align="right">   
		<tr>   
		<td>   
			<input type="button" value="上一页" class="button" name="btnpre" onclick="basicOpr.toPage(1);"  
		</td>   
		<td>   
			<input type="button" value="下一页" class="button" name="btnnext"disabled="true" onclick="basicOpr.toPage(2);" />   
		</td>   
		</tr>   
	</table>   
	</logic:empty>   
</table>   
<input type="hidden" id="CUR_PAGE" name="CUR_PAGE" />  

 

 以上代码有注意的地方如下:
1. 样式方面:用border="1" bordercolor="#708090"来做边线;用text-align: center来使得tr的标题居中。
2. 主要有到了struts的logic:empty和迭代标签logic:iterate标。logic:empty用于判断数据集是否为空,当不为空时迭代数据集。
3. 隐藏域CUR_PAGE用于时时记录翻的页数。

二、后台部份:

后台主要是获取数据,把得到的数据集放在request里。先说后台获取数据,主要是sql的写法,通过每页显示的数据量(iperpage)和当前所处的页数(icurpage)来得到要获取哪些数据:

 

if("1".equalsIgnoreCase(dir)){//上一页
	sql += " AND TT.ROWNO>"+(icurpage-2)+"*"+iperpage+" AND TT.ROWNO<="+(icurpage-1)+"*"+iperpage+"";
}else if("2".equalsIgnoreCase(dir)){//下一页
	sql += " AND TT.ROWNO>"+icurpage+"*"+iperpage+" AND TT.ROWNO<="+(icurpage+1)+"*"+iperpage+"";
}else if("0".equalsIgnoreCase(dir)){//第一页
	sql += " AND TT.ROWNO>0 AND TT.ROWNO<="+iperpage+"";
}

把数据放在list里,再把list放在request里的代码是重点,这段代码使得前台的table构造得以实现,代码如下:

	private List paramToList(param_bean param) throws Exception {
		List list = new ArrayList();
		try {
			RowSet rs = (RowSet) param.crs;
			ResultSetMetaData rsmd = rs.getMetaData();//得到ResultSetMetaData
			rs.beforeFirst();//把指针放到第一条记录的前面
			while (rs.next()) {//循环rowset集合
				Hashtable map = new Hashtable();
				for (int i = 1; i <= rsmd.getColumnCount(); i++) {
					Object val = rs.getObject(i);
					if (val == null) {
						val = new String();
					}
					map.put(rsmd.getColumnName(i), val);
				}
				list.add(map);
			}
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
			ex.printStackTrace();
		}
		return list;
	}
 
以上代码分析:
1. paramToList()主要 ejb 取得到的数据集的每一行列名和列值放到 hashtalbe 中,再把这个 hashtable 放到 list 里,返回 list
2.通过rowset.getMetaData()来得到ResultSetMetaData, ResultSetMetaData可以得到列名(rsmd.getColumnName(i))和列数(rsmd.getColumnCount())。
3. 通过 rs.getObject(i)得到单元格的值。
三:功能扩展
1. 在上一页下一页的基础上,需要增加定位到第几页,首页,尾页的功能,其实实现的方法大概差不多。
2. 增加一个隐藏域用于保存需要查询的所有数据集共有多少页,当到达最后一页时不能再让用户点击下一页了,也不用提示“最后一页”了。
四:最终的效果大概如下(测试数据):

  • 大小: 49.6 KB
0
0
分享到:
评论

相关推荐

    Ext 编辑表格视频教程

    1. **Ext Grid Panel**: Ext的核心组件之一是Grid Panel,它用于显示二维数据集,通常用于数据展示和操作。Grid Panel可以配置多种列类型,如文本、数字、日期等,并支持排序、分页和过滤。 2. **Inline Editing**:...

    仿iOS抖动单行GridView长按显示删除图标

    在Android开发中,有时我们希望实现类似iOS的交互效果,比如“仿iOS抖动单行GridView长按显示删除图标”。这种功能通常用于提供用户一种直观的编辑方式,让他们可以通过长按元素并显示删除图标来删除不需要的项目。...

    GridView实现布局

    这种设计方式常用于展示不同类型的数据,或者实现类似选项卡的功能,每个选项卡对应一个不同的GridView。注意,如果需要在同一个Activity内切换GridView,可能需要处理好布局的管理,避免内存泄漏和性能问题;如果...

    recylerview代码

    创建ViewHolder时,需要一个类型匹配的ViewGroup(通常为LayoutInflater.inflate()返回的View)作为构造参数: ```java public static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; ...

    GridView02学习

    在Android开发中,GridView是一种非常常用的布局管理器,它允许我们以网格的形式展示数据,通常用于创建类似相册、应用列表等界面。本教程将基于Android Studio 2.0进行`GridView02`的学习,旨在深入理解并掌握...

    gridview 使用实例

    GridView是Android平台中一个常用的布局控件,它主要用于展示数据集,通常以表格形式排列,类似于网页中的表格或Windows操作系统的文件管理器视图。在Android应用开发中,GridView经常用于展示图片、列表项等可滚动...

    GirdView九宫格布局

    // 构造函数,初始化上下文和数据集 public MyAdapter(Context context, List&lt;Item&gt; items) { this.context = context; this.items = items; } // 其他Adapter的方法... } ``` 3. **绑定数据** 在...

    EXT 中文手册

    - **Grid**:Grid 组件在 EXT2 中得到了进一步增强,支持更多的数据处理和显示功能。 - **XTemplate**:XTemplate 是一种模板引擎,用于生成 HTML 内容。 - **DataView**:DataView 组件用于展示数据集合,提供了...

    JAVA编程中常用的英文单词词汇汇总.doc

    95. **ResultSet**:结果集,查询结果的集合。 96. **Next**:下一个,遍历结果集时移动到下一行。 97. **Close**:关闭,释放资源,如关闭连接、结果集等。 98. **executeQuery**:执行查询,执行SQL查询并返回...

    Tkinter 教程(英文)

    Tcl/Tk由John Ousterhout在1990年代开发,是一款流行的开源脚本语言和GUI组件集。Tkinter是Python编程语言中唯一随标准库提供的GUI包。由于其广泛的应用,Tkinter适用于多种操作系统,包括Unix、Windows和MacOS,...

    java gridview使用方法

    GridView允许用户以行和列的形式显示数据,类似于电子表格。在本篇中,我们将深入探讨Java GridView的使用方法,特别针对Android平台。 1. **GridView的布局** 在Android开发中,GridView是`android.widget....

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

    学术会议管理系统毕业论文.pdf

    JavaBean是一种特殊的Java类,可以序列化、拥有无参构造器,并且它的属性可以通过getter和setter方法进行访问和修改。在Web应用程序中,JavaBean通常用来封装数据,例如表单数据,简化数据的处理。 4. AJAX ...

    LayoutsFlutter:Flutter中内置布局的示例

    `GridView`可以创建一个可滚动的网格,通常用于显示列表项,如应用的图标列表或照片集。`GridView.count`构造函数常用于创建固定列数的网格,而`GridView.extent`则基于每个子项的最大宽度来创建网格。 `...

    谷歌主页

    同时,确保网页在不同屏幕尺寸上都能正常显示,这需要运用媒体查询实现响应式设计。 总的来说,创建一个谷歌主页是一个很好的练习,可以帮助你巩固HTML和CSS的基础知识,提升网页设计和开发技能。通过这个项目,你...

Global site tag (gtag.js) - Google Analytics