技术中心

这里象征着我们的态度和能力

>Seam的页面逻辑实现
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-01-09      浏览次数:4914
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

    上一篇文章,我大概地介绍一下基于Faceslet的JSF页面端的构成。接下来,是时候说一下后台逻辑的实现啦。JSF的页面逻辑是由Managed Bean(姑且译为托管BEAN)实现。所谓的“Managed Bean”就是指一些由JSF运行时(Runtime)创建与管理的普通Java对象(潮流一点的叫法――POJO)。

    标准JSF中Managed Bean

    标准的JSF中Managed Bean是在faces-config.xml中通过XML定义的。例如:

<managed-bean>
    <managed-bean-name>helloBean</managed-bean-name>
    <managed-bean-class>
        net.blogjava.max.seam.HelloBean
    </managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

    这些XML相信不用我怎么讲解大家也知道其作用啦。定义一个BEAN,无论是在Spring、EJB还其它的BEAN容器(Container)中,无非都是这几个元素:BEAN的名称(或者标识,ID)、JAVA类型和作用域。JSF的Managed Bean有四个作用域,如下表所示:

 作用域 描述
 none 作用域是none的Managed Bean通常是定义一些公用的BEAN,它们的创建与存储依赖于引用它的BEAN
 request 在单一的HTTP请求(Request)中被创建和保持有效
 session 在HTTP的会话(Session)中被创建和保持有效,可以跨请
 application 存储WEB应用的Application上下文中,对于所有的请求和会话可见

    可能大家对“none”作用域比较陌生,举个例子可能会好理解一点:

<managed-bean>
   <managed-bean-name>helloBean</managed-bean-name>
   <managed-bean-class>
      com.pccw.jsftraining.managedbean.HelloBean
   </managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
   <managed-property>
      <property-name>messageFromOtherBean</property-name>
      <property-class>java.lang.String</property-class>
      <value>#{messageBean}</value>
   </managed-property>
</managed-bean>
<managed-bean>
   <managed-bean-name>messageBean</managed-bean-name>
   <managed-bean-class>java.lang.String</managed-bean-class>
   <managed-bean-scope>none</managed-bean-scope>
   <value>Hello World from Another Bean!</value>
</managed-bean>

  这个例子定义了一个名为messageBean、作用域是none的Managed Bean,然后它被注入名为messageBean、作用域是request的Managed Bean中。因此,这个messageBean的作用域会跟随helloBean,同为request。另外值得一提的是,上例同样展示了如何在一个Managed Bean初始其属性(Property)的值,如何引用其它的Managed Bean。

  Seam中的Web Bean(相当于Managed Bean)

  标准JSF的Managed Bean存在不少缺点:

  必须通过XML进行配置,过于麻烦;

  贫乏的作用域,上文提及标准的JSF的Managed Bean只有四种作用域:none、request、session和application。由于JSF对状态的依赖比较强,经常需要在请求之间保存应用的状态,所以很多时候我们时候都不得不使用Session作用域的Managed Bean。但是众所周知,过多地使用Session会带来很多问题,如容易造成内存耗尽,难于集群(Cluster)等。

  有监于此,Seam对JSF进行了扩展,并进而起草了Web Bean标准(Web Bean还在BETA阶段,坦白的说我也不是很了解)。下面我们就来学习一下Seam的Managed Bean(官方文档中叫Component)。在这方面Seam与标准JSF有如下不同:

  Seam的Component既可以通过XML配置,又可以通过Annotation的方式配置。我个人比较偏爱Annotation的方式,方便快捷,能够提高工作效率。XML方式有一个好处就是可以集中管理,但是因为Managed Bean配置相对比较稳定,不会经常修改,所以XML优势并不会太明显;

  更丰富的作用域(Seam中称为上下文Context),Seam有6种上下文可选:无状态(Stateless Context)、事件(Event Context,或者Request Context)、页面(Page Context)、对话(Conversation Context)、会话(Session Context)、业务流(Business Process Context)和应用程序(Application Context);

  Seam引入一种双向注入(Binjection)的方式。所谓的双向注入就是可以将上下文中的Bean注入到另一个Bean中,又或者将Bean中的属性(Property)直接发布在上下文中;

[1] [2] [3] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730
Baidu
map