jsp表格模板(转)

项目中要用到一些展示信息的表格,表头不固定,表格内容是即时从后台取的;考虑到复用性,笔者用jsp编写了一个表格模板,可以从request中获取List封装的数据,然后通过JSTL结合EL表达式填充到模板。最后完成的jsp文件可以作为一个单独的模块,嵌入到任意其它jsp页面需要的位置。

 

首先是规划一下表格的样式:

为简单起见,此处使用html的table等标签构建了一个简单的表格,表格背景隔行变色,整体颜色为蓝色系。表格定义部分的核心代码如下:

 

  1. <tablestyle="width:100%;border:1px white solid">
  2. <trbgcolor="#4F81BD"style="color: #fff;">
  3. <thstyle="text-align: center"><%=columns[0]%></th>
  4. <thstyle="text-align: center"><%=columns[1]%></th>
  5. </tr>
  6. <c:forEachitems="${list}"var="row"varStatus="status">
  7. <trbgcolor="${status.index%2 == 0?'#D0D8E8':'#E9EDF4'}">
  8. <tdalign="center">${status.current.key}</td>
  9. <tdalign="center">${row.value}</td>
  10. </tr>
  11. </c:forEach>
  12. </table>
  1. <tablestyle="width:100%;border:1px white solid">
  2. <trbgcolor="#4F81BD"style="color: #fff;">
  3. <thstyle="text-align: center"><%=columns[0]%></th>
  4. <thstyle="text-align: center"><%=columns[1]%></th>
  5. </tr>
  6. <c:forEachitems="${list}"var="row"varStatus="status">
  7. <trbgcolor="${status.index%2 == 0?'#D0D8E8':'#E9EDF4'}">
  8. <tdalign="center">${status.current.key}</td>
  9. <tdalign="center">${row.value}</td>
  10. </tr>
  11. </c:forEach>
  12. </table>
<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:

 

  1. package com.reports.charts.bean;
  2. public classKeyValueBean {
  3. private String key;
  4. private String value;
  5. public KeyValueBean() {
  6. }
  7. public KeyValueBean(String key, String value) {
  8. this.key = key;
  9. this.value = value;
  10. }
  11. public String getKey() {
  12. return key;
  13. }
  14. publicvoid setKey(String key) {
  15. this.key = key;
  16. }
  17. public String getValue() {
  18. return value;
  19. }
  20. publicvoid setValue(String value){
  21. this.value = value;
  22. }
  23. }
  1. package com.reports.charts.bean;
  2. public classKeyValueBean {
  3. private String key;
  4. private String value;
  5. public KeyValueBean() {
  6. }
  7. public KeyValueBean(String key, String value) {
  8. this.key = key;
  9. this.value = value;
  10. }
  11. public String getKey() {
  12. return key;
  13. }
  14. publicvoid setKey(String key) {
  15. this.key = key;
  16. }
  17. public String getValue() {
  18. return value;
  19. }
  20. publicvoid setValue(String value){
  21. this.value = value;
  22. }
  23. }
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”。

 

  1. <%@ page language="java"contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
  4. <%@ page import="com.reports.util.ReportFunctions"%>
  5. <%@ page import="com.reports.util.SpringContextHolder"%>
  6. <%@ page import="java.util.*"%>
  7. <%@ page import="com.reports.charts.bean.KeyValueBean"%>
  8. <%
  9. String[]columns = null;
  10. try{
  11. columns= request.getParameter("columns").split("\\|");
  12. }catch(NullPointerExceptione){
  13. e.printStackTrace();
  14. System.out.println("参数columns未赋值");
  15. }
  16. if(null == columns){
  17. columns= newString[]{"设备种类","数量"};
  18. }
  19. Stringparam = request.getParameter("p");
  20. ReportFunctionsreportF = SpringContextHolder.getBean(ReportFunctions.class);
  21. List<KeyValueBean>list = null;
  22. if(null != param){
  23. list= report.method(param);
  24. }else{
  25. System.out.println(“参数获取失败”);
  26. }
  27. if(0 == list.size()){
  28. list.add(new KeyValueBean("暂未统计", "暂无数据"));
  29. }
  30. request.setAttribute("list", list);
  31. %>
  32. <table style="width:100%;border:1px white solid">
  33. <tr bgcolor="#4F81BD"style="color: #fff;">
  34. <th style="text-align: center"><%=columns[0]%></th>
  35. <th style="text-align: center"><%=columns[1]%></th>
  36. </tr>
  37. <c:forEach items="${list}" var="row"varStatus="status">
  38. <tr bgcolor="${status.index%2 == 0?'#D0D8E8':'#E9EDF4'}">
  39. <td align="center">${status.current.key}</td>
  40. <td align="center">${row.value}</td>
  41. </tr>
  42. </c:forEach>
  43. </table>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值