个人管理功能

在CSDN Blog撰写技术文章,即有机会入选CSDN技术中心,现在就去免费注册!已注册用户,点击登录

搜索
热门标签
专题历史

有人说SOA是一种IT策略,有人说SOA是一种架构理念,还有人说SOA是一种服务。SOA到底是什么?它将带来什么?软件产业的变革亦或是新的机遇下的挑战?业界权威专家带领我们一起去深究,去探索。BEA三位重量级专家与您共同探讨SOA

随着WPF/E更名为正式名称Silverlight,以及Silverlight 1.1 Alpha 版本的发布,答案变得清晰,而且令人兴奋! - 一个跨操作系统,跨浏览器的Web应用平台出现了。Silverlight 这样一个4.5MB的浏览器插件(1.1 Alpha文件)是如何做到的这些的?周岳: SilverLight-Web应用的一道强光

中国移动用户数量在大踏步地发展与增长,根据产业部的数据,仅三月就新增了670万户。预估计6月份之后,中国很快将迎来第五亿手机用户(平均不到3人拥有一台手机)而J2ME做为最重要的手机跨平台技术,凭借Java平台以其良好的开放性和支持能力,得到了众多手机厂商的支持。对众多开发者来说,J2ME程序易于移植,轻松实现“一次编写,到处运行”。J2ME系列开发专题,将带你从最基本的工具安装,环境配置开始,进入移动应用开发的世界。
 
CSDN移动开发系列之-“J2ME开发实训”

7月31日-8月1日,即将在上海召开甲骨文全球大会•亚太地区会议同期举行的甲骨文开发者大会,这是一项付费参加的面向开发人员的活动。在甲骨文开发者大会期间,您将听到世界一流的专家讲述如何使用Java、.NET、XML和PL/SQL以及Ajax、PHP、Spring、Groovy on Rails等流行技术来简化开发过程。在为期两天的甲骨文开发者大会中,您将能够提高自身的开发技能,扩充知识,参加几十场由专家主持的深入细致的技术讲座并在专家的辅导下进行上机操作、了解高级技能和获得详细指导。在甲骨文开发者大会期间,您有机会直接向业界一流的技术专家和开发人员请教。欢迎参加甲骨文全球大会·2007·亚太地区开发者大会

2007年6月29日,自由软件基金会宣布,其创始人Richard Stallman将在GNU的网站上,在本周太平洋时间星期五上午9点通过视频发布GPLv3。本来,GPL并不是所有开源组织所认可的协议。其从出现以来一直存在争议,GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写Unix的年头都比GPL声明要长得多,他们更愿意采用比GPL更加的自由的BSD协议。今天,开源社区中有70%左右的项目采用了GPL。很多在开源社区的老牌黑客们认为,Richard Stallman所鼓吹开源软件的言行与当年卡尔·马克思号召产业无产阶级反抗工作的努力如出一辙。在GPLv3的第三版修订案发布时,开源软件团体中的许多成员都反对这种协议。尤其是Linux的核心开发小组,其中29个高级架构师有28个反对这个协议。Linus Torvalds称这个协议有“宗教性质”,并公开反对。而整个软件行业特别是开源社区对GPLv3的争论也愈演愈烈。GPLv3:大教堂和集市的新一轮对抗

2007年7月14日由CSDN与ThoughtWorks联合主办的第二届“敏捷中国”技术大会在北京丽亭华苑酒店召开,多位开源社区和ThoughtWorks公司的技术领袖即将带来精彩的演讲。本次“敏捷中国”技术大会集中展现塑造敏捷企业所需的方方面面:业界领先的敏捷项目管理工具;极大提升软件开发效率的新语言和新框架;数据库领域的敏捷实践;全方位的敏捷项目管理指导;还有身临其境的亲身体验。来自开源社区和ThoughtWorks公司的技术领导者们将带领听众全面感受敏捷企业。“敏捷中国大会”现场直击

从2004年起,在每年的夏季,CSDN都会举办面向中国程序员的大型网上调查活动。这是中国样本最丰富的开发者社区调查,持续、全面和深入地反映了中国开发者社群自身状况、各项技术、工具、产品的使用状况和发展趋势,是完整、准确地了解中国开发者市场的重要参考资料。本次调查覆盖基础信息、.NET、Java、C/C++、Web开发、数据库应用开发、软件工程及项目管理、移动及嵌入式开发、开放源代码、企业信息化等10个领域。还有惊喜大奖等着你哦,赶快进入吧! 2007中国软件开发者大调查正式启动

推荐作者
  • 大宝大宝

    时间如流水,知惜方成功。

  • SkymanSkyman

    江苏人氏,梅兰芳之老乡。现游学渝州之最...

  • ralph623ralph623

新进作者
  • 冲 s冲 s

  • 小鱼小鱼

  • 棱角棱角

    多年J2EE构架设计与开发经验,专注于企业信息系统建设,精通Java设计模式,并能熟练的运用到企业开发中。 精通Struts与Spring框架。数据库方面精通Oracle数据库,从事过数据库方面的开发以及oracle优化方面的工作。

最新技术图书推荐
Jsp页面列表组件框架设计

发表日期:2007-8-30
更新日期:2007-8-30
作者文章阅读次数:5785

源自:李俊杰 (个人网站) 标签:web开发

您认为本文应该得        共有6人参与打分打印|收藏|讨论|投诉

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

Jsp页面列表组件框架设计

                作者:李俊杰

概述

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

实现机制

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

调用示例:

Action

 

//获取数据库数据

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

                     list = listRowCount.getList();

//调用列表组件

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

ColDataMgr    mgr = 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

{

 

       ArrayList list   = null;

 

       DataMap        map        = 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 String  name;

 

       private String  displayName;

 

       private boolean       isLink;

 

       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

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.util.ArrayList"%>

<%@ page import="java.util.HashMap"%>

<%@ page import="com.e_chinalife.ecms.frame.component.colmap.ColMetaInfo"%>

<%

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

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

       int colLen = colMetaInfos.size();

       int resultCount = datas.size();

%>

<table border="0" width="99%" cellspacing="1" cellpadding="0" align="center" class=ItemList>

       <TBODY>

              <TR align=center>

              <%

                     ColMetaInfo colMeta = null;

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

                     {

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

 

              %>

                     <TD class=ItemTitle height=20 nowrap>

                            <%=colMeta.getDisplayName()%>

                     </TD>

              <%

                     }

              %>

              </TR>

              <%

                     HashMap hm = null;

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

                     {

              %>

              <TR align=center borderColor=#999999 class=ItemBody>

              <%

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

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

                            {

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

              %>

                     <TD <%=colMeta.getProperty()%> >

              <%

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

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

                                   {

 

              %>

                     <a href="<%=hm.get("SUPERLINK")%>"> <%=hm.get(colMeta.getName())%></a>

              <%

                                   }

                                   else

                                   {

 

              %>

                                          <%=hm.get(colMeta.getName())%>

              <%                }