赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

JSP的设计模式基础:View Helper模式

发布时间:2007.12.10 05:03     来源:赛迪网    作者:执木

View Helper模式告诉我们,我们能使用Helpers来使得在一个应用中,Model数据能够适应表现层的需要。典型的,表现层一般都包括一些JSP页面。这些页面由一些用来给用户显示内容的HTML和图片组成。然而,当这些页面需要显示一些存储在Model上的动态信息的时候,这里有一个问题出现了。你希望能够避免在页面上为了显示那些动态数据而使用嵌入的Java代码,你就得使用一些Helper来帮助你实现上述的功能。要抛弃那些在控制器Servlet里将一些Model数据作为一个属性存储在request里面的想法。在一个页面里,你要获取Model数据,有三种选择。你可以以JSP脚本的形式嵌入Java代码;你也可以使用EL;或者你也可以使用一个Helper帮你取得数据。根据将表现层和商业逻辑分离的原则,使用一些Helper来帮助我们使得数据适应表现层的要求比将表现层代码和Java代码混在一起有意义(参见图1)。图1你可以设想,通过使用简单易用的Helper代替Java代码,页面设计人员开发表现层变得简单多了。当然,前提是开发人员发布了一个Helper目录并且详细描述了这些Helper怎么使用;因为这样开发人员才会使用那些Helper。然而,如果在开发人员能够提供使Helper运行起来的Model数据之前,页面设计人员就已经设计了页面,就又有新的问题。解决这个问题的一个有用的技巧是在Helper里设置一些假数据以便在没有Model数据的时候显示;还有一个可以替代的方法是在Model里设置一些能使Helper运行的假数据。无论哪种方法,页面设计人员都不会在等待开发人员的时候闲起来。使用Helper有如下优点:。表现层的组件是标准化的,为应用提供了统一的look和feel。Java代码从页面设计人员那里被抽离,使得他们有了易用的Helper来访问Model。如果Model还不存在的话,你可以创建一些Helper来显示一些假数据。这样,不管应用程序的准备如何,页面设计人员都可以进行他们的设计工作。。Helper作为业务数据和表现层的中介,它可以把两者清晰的分离开来。 实现JavaBeans Helper的策略在为JSP页面开发Helper的时候,你有两种选择。你可以使用JavaBeans或者定制标签,具体选择哪一种取决于你在Helper中所要处理的数据。一般来说,JavaBeans适合你处理单个的数据,而定制标签却更适合使用在那些处理一系列数据的场合。然而,需要着重指出的是,你可以用任意一种方法来处理两种类型的数据。实现View Helper模式的策略你可以在一个JSP页面里用JavaBeans来实现Helper。当处理和格式化单一的文本数据时,JavaBeans模式的Helper非常简单易用。那些内置的JSP标签会让你非常简单和直观的使用JavaBeans。对JavaBeans的使用包括简单的声明,后面就可以引用该给定的标签了,就像下面那样:<%-- Declare bean --%><%-- Get first name from bean --%>Hello ,welcome to Acme Products' o­nline store!JavaBeans能做的事可不仅仅是简单的将数据项从Model里取出来,它还能格式化制定的数据项、进行计算或产生大块的数据项。如你所想,它非常适合使用内嵌的JSP标签来获取数据项。但是如果你使用JavaBeans太多,那么你的JSP页面将因为太多的Java代码而变得混乱不堪,不管你使用多少EL。在这种情况下,你应该把所有的附加行为封装到一个制定标签里面去。 实现定制标签Helper的策略为了对付复杂Model的转换,定制标签能够嵌入Java代码,操作好几个有关数据的算子,只提供简单的标签给页面设计者使用。为了使用定制标签,你必须写一个继承了TagSupport或BodyTagSupport的类。你可以在标签库描述符里声明你的类,如下所示:Listing 1. An Example TLD 1.02.0myTags Tag library to support the examples in Chapter 8 myTag jspbook.ch08.myTag JSP myAttribute yes 通过在JSP页面里首先使用taglib指示符声明以后,这个定制标签就能够在页面里被引用,如下所示:<%@ taglib uri="/helpers" prefix="helpers" %> Body text... 我更倾向于使用定制标签作为View Helper的实现方式。因为当它们集中存储在应用服务器的时候,它们给了开发人员更多的访问Servlet上下文的权限并且提供了更多的性能优点。另一个我倾向于使用定制标签的原因是它更利于非Java开发人员直观的使用,它们的格式更像标准的HTML标签,这些HMTL标签对于我们大多数的人来说再熟悉不过。最后,一旦这些定制标签经过了你的开发和测试,你就可以在你的整个项目的所有JSP页面使用它们。一旦这些定制标签被设计得更加通用,那么你可以将它们打包起来在所有的项目中使用到它们。 实现Model分离的策略不管是使用定制标签或者JavaBeans,提供独立的Helper是非常有用的,这些独立的Helper能够在没有Model数据存在的时候提供一系列的假数据来代替Model数据。这使得页面开发人员可以独立于开发团队而完成它们的任务。为了实现这种策略,Helper需要去检测Model的存在,以便使用一个真实的Model数据或者使用一个静态的假Model数据(如下图)。按照这个思路,我们需要创建一个静态的Model来精确复制真实的Model。不是所有的时候都能让这两者保持同步。一个在某些时候更完美的替代方法是,让开发人员创造一些假数据到Model里头,以便页面开发人员能够当作真实Model已经存在一样;同时也确保了他们自己工作的那个Model永远是正确的。

     (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· JAVA基础:困扰JSP的一些问题与解决方法 (12-07) · 两种输出机制在Servlet中的使用 (12-07)
· 深入剖析 JSP 和 Servlet 对中文的处理 (12-07) · 深入浅出Java的同步 (12-07)
· 关于连接池问题,其实你多想想就明白了 (12-06) · Weblogic下使用jsp查询的Entity Bean (12-06)
· JAVA基础:漫谈Java程序设计中的接口应用 (12-06) · 教你在Java数据库编程中的几个常用技巧 (12-06)
· 建立JSP操作用以提高数据库访问的效率 (12-06) · 初学入门:JAVA里字符编码的探索与理解 (12-06)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 推动产业升级 沪年内首推电子商务地方法规
· 中国域名成为全球顶级域名 促进社会信息化
· 签合同前的四问 谈八大厂商“云计算”理念
· 亚略特烟草解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统