displaytable 动态列

现在项目结束了,总结一下项目中遇到的一个比较棘手的问题,那就是displaytable的动态列。之所以比较棘手是因为系统中涉及到一个验证数据库([color=red]其实就是一张逻辑表[/color]),而这个验证数据库以及库中的验证字段都是用户自定义的,所以我无法预知用户在这个数据库中创建多少个字段。在给用户展示这个验证数据库的信息时,需要用displaytable来显示。无论是通过官方的文档还是各位高手的博文中只提到了预知列数的前提下做了一定的动态显示,因此让我在这个项目中也苦闷了两三天。

官方文档中用到了sublist和map来实现,当然这个sublist中仍然放置的是一个vo对象。由于在我这里无法预知这个值对象中该设置多少个值,后来想了个一个办法那就是list中直接封装map,彻底解决了我目前的业务需要。废话少说,下面就给出部分代码供大家讨论讨论(有不足之处请高手指点)。

取数据到最后的显示大致分为四步([color=red]由于是逻辑数据库必须这么做,如果不是逻辑数据库也可以按照此方式来分解你的数据[/color]):
第一步是取出列名放入到colList中的部分代码片断。

// 这是我的dao取出的列名,按照如下方式放入到colList中,
// 下面map也你可以看作是一个vo对象,因为map中的put(),get()方法与值对象中的set()和get()方法类似。
while(rs.next){
Map map = new HashMap();
map.put("property",rs.getString("FieldCodeName"));
map.put("title",rs.getString("FieldName"));
colList.add(map);
}


第二步是取出每一行的数据放入到rowList中

// 在这里一定要注意数据行与列的匹配
while (rs.next()){
Map map = new HashMap();
for (int i = 0; i < colList.size(); i++){
Map m = (Map)colList.get(i);
map.put(m.get("property"), rs.getString(m.get("property")));
}
rowList.add(map);
}


第三步构建完毕的list在Action中放入到request里面去

request.setAttribute("collist", colList);
request.setAttribute("rowlist", rowList);


最后一步就是在jsp页面上的展示,大功告成

<display:table name="rowlist">
<c:forEach var="cl" items="${collist}">
<display:column property="${cl.property}" title="${cl.title}"></display:column>
</c:forEach>
</display:table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值