一起学习

Jsp页面列表组件框架设计

作者:李俊杰

概述

为了提高开发效率,减少重复的页面多次开发,提高系统的可配置性和代码的可复用性,也是为了展示struts、hibernate框架,设计原则是降低显示逻辑和数据的耦合,达到显示逻辑和数据完全分离,即相同的数据使用不同的显示逻辑,无须修改显示逻辑,只需置换不同的显示模版即可。

实现机制

其中SturtsAction是具体的需要调用列表的Action类,TempDataMap类是具体的列表数据的封装类,TempData类是具体的表记录类,即TempDataMap来适配TempData,把表记录适配成我们需要的列表显示类。

调用示例:

Action:

//获取数据库数据

listRowCount = query.findPayItemByParam(paramInfo,paramForm.getPageSize(),paramForm.getPageNo());

list = listRowCount.getList();

//调用列表组件

if(list != null && list.size() > 0)

ColDataMgrmgr = new ColDataMgr(getDataMaps(list));

//获取列表的表列信息,数据信息

ArrayList colMetaInfos = mgr.getColMetaInfos();

ArrayList datas = mgr.getData();

//将列表信息传到List页面

request.setAttribute(CoreConstant.WEB_DISPLAY_COL_METAT_INFOS_KEY, colMetaInfos);

request.setAttribute(CoreConstant.WEB_DISPLAY_DATAS_KEY, datas);

同样道理,给出的数据可以分发给打印组件和导出excel列表组件,根据列表的列信息和数据信息,导出excel和打印。

具体的map类的内容可参照附件ReceiveItemAmountQueryMap.java文件。

获取显示列信息:

/**

*返回的list中每个元素是列元信息类对象,列元信息类对象包括列名称,列显示名称,

*列显示格式,其中列名称是key

*导出excel和打印是同样的道理

*/

public ArrayList getColMetaInfos()

{

ArrayList list = new ArrayList();

list.add(new ColMetaInfo("transCode", "单据编号", true, "height="20" align="center" nowrap"));

list.add(new ColMetaInfo("transDate", "单据日期", false, "height="20" align="center" nowrap"));

list.add(new ColMetaInfo("transTypeName", "业务类型", false, "height="20" align="left" nowrap"));

list.add(new ColMetaInfo("receiveOrgName", "收款单位", false, "height="20" align="left" nowrap"));

list.add(new ColMetaInfo("receiveAccountNo", "收款账户号", false, "height="20" align="center" nowrap"));

list.add(new ColMetaInfo("receiveBankName", "收款银行", false, "height="20" align="left" nowrap"));

list.add(new ColMetaInfo("extAccountNo", "付款账户", false, "height="20" align="center" nowrap"));

list.add(new ColMetaInfo("extBankName", "付款银行", false, "height="20" align="left" nowrap"));

list.add(new ColMetaInfo("amount", "金额", false, "height="20" align="right" nowrap"));

list.add(new ColMetaInfo("memo", "摘要", false, "height="20" align="left" nowrap"));

return list;

}

//适配数据,根据数据的类型如日期型,装换成需要的字符串形式,金额类数据也转换成相//应的字符串格式,保存到HashMap中。

public HashMap getColData()

{

StringBuffer sb = new StringBuffer("receiveItemAmountQueryAction.do?operation=");

sb.append(CoreConstant.WEB_OPERATION_TYPE_TO_UPDATE_KEY);

sb.append("&id=");

sb.append(String.valueOf(form.getTransApplyItem().getTransApplyID().longValue()));

String link = sb.toString();

HashMap hm = new HashMap();

hm.put("transCode"," " IDataFormat.formatString(form.getTransCode()));

hm.put("transDate", " " IDateFormat.toDateString(form.getTransDate()));

hm.put("transTypeName", " " IDataFormat.formatString(form.getTransTypeName()));

hm.put("receiveOrgName", " " IDataFormat.formatString(form.getReceiveOrgName()));

hm.put("receiveAccountNo", " " IDataFormat.formatString(form.getReceiveAccountNo()));

hm.put("receiveBankName", " " IDataFormat.formatString(form.getReceiveBankName()));

hm.put("extAccountNo", " " IDataFormat.formatString(form.getTransApplyItem().getExtAccountNo()));

hm.put("extBankName", " " IDataFormat.formatString(form.getTransApplyItem().getExtBankName()));

if (form.getTransApplyItem().getAmount() != null)

{

String sAmount = " " IDataFormat.formatDisabledAmount(form.getTransApplyItem().getAmount().doubleValue() );

hm.put("amount", sAmount);

}

else

{

hm.put("amount", "0.00");

}

hm.put("memo", " " IDataFormat.formatString(form.getTransApplyItem().getMemo()));

hm.put("SUPERLINK", link);

return hm;

}

附录:

DataMap接口:

/**

* @author lijj

*

* To change the template for this generated type comment go to

* Window - Preferences - Java - Code Generation - Code and Comments

*/

public interface DataMap {

public ArrayList getColMetaInfos();

public ArrayList getExeclColMetaInfos();

public ArrayList getPrintColMetaInfos();

public ArrayList getColSearchs();

public HashMap getQueryData();

public String getSearchUrl();

public HashMap getColData();

}

抽象实现类DefaultDataMap

import java.util.ArrayList;

import java.util.HashMap;

/**

* @author lijj

*

* To change the template for this generated type comment go to

* Window - Preferences - Java - Code Generation - Code and Comments

*/

public abstract class DefaultDataMap implements DataMap{

public abstract ArrayList getColMetaInfos();

public abstract HashMap getColData();

public ArrayList getExeclColMetaInfos()

{

return new ArrayList();

}

public ArrayList getPrintColMetaInfos()

{

return new ArrayList();

}

public String getSearchUrl()

{

return null;

}

public HashMap getQueryData()

{

return null;

}

public ArrayList getColSearchs()

{

ArrayList retList = new ArrayList();

return retList;

}

}

ColDataMgr管理类:

import java.util.ArrayList;

import java.util.HashMap;

/**

* @author lijj

*

* To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code and

* Comments

*/

public class ColDataMgr

{

ArrayListlist= null;

DataMapmap= null;

public ColDataMgr(ArrayList list)

{

this.list = list;

}

public ColDataMgr(DataMap map)

{

this.map = map;

}

public ArrayList getColMetaInfos()

{

if (list != null)

{

return ((DataMap) list.get(0)).getColMetaInfos();

}

else

{

return this.map.getColMetaInfos();

}

}

public ArrayList getExeclColMetaInfos()

{

if (list != null)

{

return ((DataMap) list.get(0)).getExeclColMetaInfos();

}

else

{

return this.map.getExeclColMetaInfos();

}

}

public ArrayList getPrintColMetaInfos()

{

if (list != null)

{

return ((DataMap) list.get(0)).getPrintColMetaInfos();

}

else

{

return this.map.getPrintColMetaInfos();

}

}

public ArrayList getData()

{

ArrayList retList = new ArrayList();

DataMap dataMap = null;

if (list != null)

{

for (int i = 0; i < list.size(); i )

{

dataMap = (DataMap) list.get(i);

retList.add(dataMap.getColData());

}

}

return retList;

}

public ArrayList getSearchInfos()

{

return getDataMap().getColSearchs();

}

public String getSearchUrl()

{

return getDataMap().getSearchUrl();

}

public HashMap getQueryData()

{

return getDataMap().getQueryData();

}

private DataMap getDataMap()

{

if (this.map != null)

{

return map;

}

else

{

return ((DataMap) list.get(0));

}

}

}

列元信息类ColMetaInfo

/**

* @author lijj

*

* To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code and

* Comments

*/

public class ColMetaInfo

{

private Stringname;

private StringdisplayName;

private booleanisLink;

private String property;

public ColMetaInfo(String name, String displayName, boolean isLink, String property)

{

this.name = name;

this.displayName = displayName;

this.isLink = isLink;

this.property = property;

}

public String getDisplayName()

{

return displayName;

}

public void setDisplayName(String displayName)

{

this.displayName = displayName;

}

public boolean isLink()

{

return isLink;

}

public void setLink(boolean isLink)

{

this.isLink = isLink;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public String getProperty()

{

return property;

}

public void setProperty(String property)

{

this.property = property;

}

}

模版文件list.jsp

ArrayList colMetaInfos = (ArrayList) request.getAttribute("colMetaInfos");

ArrayList datas = (ArrayList) request.getAttribute("datas");

int colLen = colMetaInfos.size();

int resultCount = datas.size();

%>

ColMetaInfo colMeta = null;

for (int i = 0; i < colLen; i )

{

colMeta = (ColMetaInfo) colMetaInfos.get(i);

%>

}

%>

HashMap hm = null;

for (int i = 0; i < resultCount; i )

{

%>

hm = (HashMap) datas.get(i);

for (int j = 0; j < colLen; j )

{

colMeta = (ColMetaInfo) colMetaInfos.get(j);

%>

>

if (colMeta.isLink() && hm.get(colMeta.getName()) != null

&& !((String) hm.get(colMeta.getName())).equals(""))

{

%>

}

else

{

%>

}

%>

}

%>

}

%>

//没有记录显示空白行

if (resultCount == 0)

{

%>

for (int i = 0; i < colLen; i )

{

colMeta = (ColMetaInfo) colMetaInfos.get(i);

%>

}

}

%>

Jsp使用列表模版的片断

开户申请

新增" name="bt" class=button onClick="JavaScript:to_Add();">

java 列表组件_Jsp页面列表组件框架设计相关推荐

  1. jsp java 传值方法_JSP页面间的传值方法总结

    前言 jsp 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧.试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式.下面来一起看看详细的介绍: 1. url 链接后追加参数 ...

  2. jsp java 传值方法_JSP 页面传值方法总结(转)

    JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式. 1. URL 链接后追加参数 URL 后面追加参数 resp ...

  3. java中的%%%_JSP页面中%!%与%%与%=%

    首先,我们要了解jsp运行原理.JSP的本质就是一个Servlet,JSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译 为.class文件,而我们在访问jsp时, ...

  4. java jsp 传值_jsp页面间的传值方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  5. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

  6. 美团民宿跨端复用框架设计与实践

    从 PC 时代.移动时代到万物互联的 IoT 时代,伴随终端设备的日趋多样化,跨端复用的种子自此落地,开始生根发芽.从依靠容器能力.各类离线化预装包的 Hybrid 方案,到通过 JSC 连接 Jav ...

  7. vue html模板递归,vue使用递归组件实现多级列表

    一.背景需求 在页面上渲染一个多级列表的时候,数据往往也具有多个层级 例如:数组的每个元素都是一个对象,对象中的value可能是一个数组 { "ret": true, " ...

  8. Flutter ListView (动态)列表组件、水平列表组件、图标组件详解

    Flutter ListView (动态)列表组件.水平列表组件.图标组件 Flutter ListView 基础列表组件.水平列表组件.图标组件 列表常见的几种情况: 垂直列表 垂直图文列表 横向列 ...

  9. vue中递归组件实现多级列表

    一.递归组件的概念 递归组件: 递归组件简单来说在组件内使用组件本身.这个在vue的项目开发中也是比较常见的.对于一些多级的数据嵌套,如果对于每一层数据都进行for循环嵌套,那会非常繁琐,也很不方便. ...

最新文章

  1. seaborn可视化水平箱图并添加抖动数据点(Horizontal boxplot with jittered points in Python)
  2. 在Windows上编译UEFI SDK 2018/OVMF的方法
  3. Vishay将MCW 0406 AT系列精密宽端子薄膜片式电阻欧姆值降至业内最低
  4. django_form校验
  5. orton效果_如何使图片发光:Orton效果
  6. 【C语言简单说】十七:数组
  7. 图解Kafka中的基本概念
  8. 微信开发本地调试工具(模拟微信客户端)
  9. 图片作为背景并且是链接的写法(背景图片加链接)
  10. 芯原的神经网络处理器IP获百余款人工智能芯片采用
  11. WIN10家庭版+ANSYS/AUTODYN安装学习
  12. CRMEB多商户商城系统主要功能及技术亮点
  13. 读书百客:《圆圆曲》评赏
  14. iphone手机配置qq邮箱服务器设置,在iPhone中如何设置qq邮箱
  15. 怎么使用pyd 文件
  16. 计算特征根时出现复数 ComplexWarning: Casting complex values to real discards the imaginary part
  17. IE浏览器提示无法显示网页的三种情况
  18. 【NOIP2014】解方程【秦九韶】【高精度处理】
  19. 基于at89c51单片机的led数字倒计时器设计c语言,课程设计(论文)-基于AT89C51单片机的LED数字倒计时器设计.docx...
  20. 解决Chrome 内置的翻译功能翻译用不了

热门文章

  1. 批处理bat中的脚本
  2. 爬墙技术哪家强,师范找锡伟
  3. Codeforces Round #344 (Div. 2)C. Report
  4. 百度网络监控实战:NetRadar横空出世(上)
  5. vue.js学习笔记(1)
  6. Windows Phone开发(27):隔离存储A
  7. C#中打开文件和自动生成缩略图之我建
  8. Windows Server 2008 R2 做开发需要开启那些角色和组件
  9. Silverlight 4 中数据绑定发生的变化
  10. LOADRUNNER 登陆功能测试实例(转)