用JSP创建一个表格模板
request中获取List封装的数据,然后通过JSTL结合EL表达式填充到模板。最后完成的jsp文件可以作为一个单独的模块,嵌入到任意其它jsp页
面需要的位置。
首先是规划一下表格的样式:
为简单起见,此处使用html的table等标签构建了一个简单的表格,表格背景隔行变色,整体颜色为蓝色系。表格定义部分的核心代码
如下:
[html]
<table style="width:100%;border:1px white solid">
<tr bgcolor="#4F81BD"style="color: #fff;">
<th style="text-align: center"><%=columns[0]%></th>
<th style="text-align: center"><%=columns[1]%></th>
</tr>
<c:forEach items="${list}" var="row"varStatus="status">
<tr bgcolor="${status.index%2 == 0?'#D0D8E8':'#E9EDF4'}">
<td align="center">${status.current.key}</td>
<td align="center">${row.value}</td>
</tr>
</c:forEach>
</table>
此表格只有两列,可用于显示包含一组“键值对”的数据。代码中的columns是jsp页面中定义的一个java字符串数组,保存两列
列头的值,例如:“设备类型”、“数量”。数据行使用JSTL的forEach标签来遍历各条数据,其中list变量是存放在request中的List类型的
对象,List中存放了一组包含“键值对”的数据实体,笔者所用的数据实体是一个简单的Bean:
[java]
package com.reports.charts.bean;
public classKeyValueBean {
private String key;
private String value;
public KeyValueBean() {
}
public KeyValueBean(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value){
this.value = value;
}
}
模板中的取值方法用到了EL表达式,例如${list}表示取出request中的list对象。${status.current}和${row}其实指代的是同
一个东西,也就是当前遍历的数据行,这里使用两种不同的写法是为了给读者提供更多实现方式的参考。关于EL表达式的详细信息,可参考笔
者转发的文章《JSP中的EL表达式详细介绍》。
接下来的关键就是传递list的值放到request中了。一般J2EE项目中都使用了Struts、SpringMVC等mvc框架,常见的处理流程应该是客
户端发送数据请求,Controller接收请求进行处理,取出并生成合适的数据存放到一个List中,然后转发给View,也就是转发给JSP页面来显示
。
然而基于其它的考虑,笔者希望这个jsp页面可以不经过Controller而独立运行,于是就需要将控制层移到jsp代码中;完整的jsp模板
定义代码如下:
其中,SpringContextHolder是笔者定义的一个获取Spring管理的其它Bean的工具类,用这个类可以方便地在同一个项目所有运行Java
代码的地方使用,详见笔者的:《在JavaWeb应用中获取Spring管理的Bean的方法》。ReportFunctions类是一个业务类,包含了许多具体业务
的代码,除了本文的jsp模板中可以使用之外,在项目的其它许多控制类都会用到。或者换句话说,笔者此处是借用了项目中现有的一个业务类
,抽象出了一个模板。我们将模板保存一下,例如保存为“_tb2ColParam.jsp”,然后带着参数访问或获取这个jsp即可呈现出一个带样式的表
格:“_tb2ColParam.jsp?p=1024&columns=types|nums”。
[plain]
<%@ page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core"prefix="c" %>
<%@ page import="com.reports.util.ReportFunctions"%>
<%@ page import="com.reports.util.SpringContextHolder"%>
<%@ page import="java.util.*"%>
<%@ page import="com.reports.charts.bean.KeyValueBean"%>
<%
String[]columns = null;
try{
columns= request.getParameter("columns").split("\\|");
}catch(NullPointerExceptione){
e.printStackTrace();
System.out.println("参数columns未赋值");
}
if(null == columns){
columns= newString[]{"设备种类","数量"};
}
Stringparam = request.getParameter("p");
ReportFunctionsreportF = SpringContextHolder.getBean(ReportFunctions.class);
List<KeyValueBean>list = null;
if(null != param){
list= report.method(param);
}else{
System.out.println(“参数获取失败”);
}
if(0 == list.size()){
list.add(new KeyValueBean("暂未统计", "暂无数据"));
}
request.setAttribute("list", list);
%>
<table style="width:100%;border:1px white solid">
<tr bgcolor="#4F81BD"style="color: #fff;">
<th style="text-align: center"><%=columns[0]%></th>
<th style="text-align: center"><%=columns[1]%></th>
</tr>
<c:forEach items="${list}" var="row"varStatus="status">
<tr bgcolor="${status.index%2 == 0?'#D0D8E8':'#E9EDF4'}">
<td align="center">${status.current.key}</td>
<td align="center">${row.value}</td>
</tr>
</c:forEach>
</table>
上一篇: Android:换肤技术讲解
下一篇: MySQL常用的修改表命令总结
推荐阅读
-
Excel用函数和公式瞬间实现把表格全部合并到一个表中去
-
用C#在本地创建一个Windows帐户(DOS命令)
-
用模板的方式创建守护进程代码实例
-
用按钮触发Javascript动态生成一个表格的代码
-
模板字符串替换教程,实现一个 render(template, context) 方法,将 template 中的占位符用 context 填充
-
用html5的canvas和JavaScript创建一个绘图程序的简单实例
-
用Eclipse搭建Android开发环境并创建第一个Android项目(eclipse+android sdk)
-
CorelDRAW(CDR) X4用表格工具轻松设计创建漂亮传单实例教程
-
在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法
-
用qrcode库创建一个包含信息的二维码