分享

bean scope in jsf

 chanvy 2009-01-08
再来解释JSF中的MBean,其实MBean就是一个JavaBean,因此它有着和JavaBean相同的要求。
        最后是MBean的配置,JSF的MBean需要在faces-config文件中做配置,配置方法如下:
    <managed-bean>
       
<description>demo of config</description>
       
<display-name>userInfo</display-name>
       
<managed-bean-name>user</managed-bean-name>
       
<managed-bean-class>net.moon.beans.UserInfo</managed-bean-class>
       
<managed-bean-scope>session</managed-bean-scope>
    
</managed-bean>
 
对其中的managed-bean-name,managed-bean-class和managed-bean-scope做一下解释。
        managed-bean-name是这一MBean的名字,用于其它位置的调用。
        managed-bean-class是这一MBean的完整路径,用于指明该MBean的类文件位置。
        managed-bean-scope是这一MBean的有效范围。
下面再对manage-bean-scope进行一下详细的解释,其有效取值为:application, session, request, none。很容易理解,它们的存活周期分别如下:
Name
Scope
Application
整个应用
Session
整个对话
Request
整个请求
None
需要时,临时
大家知道,JSF是以JSP为基础的,那么,对于JSP的九大对象来说,这四种scope的信息到底是怎么存储的呢?
经过测试证明,scope为applicatoin的MBean的实例保存在ServletContext中,也就是JSP中的application中,因此我们可以用如下的方法得到某个类的引用:
FacesContext fc = FacesContext.getCurrentInstance();
UserInfo ui 
= (serInfo)fc.getExternalContext().getApplicationMap().get("user");
 
 
对session级别的MBean,我们可以用如下方法得到其引用:
FacesContext fc = FacesContext.getCurrentInstance();
UserInfo ub 
= (UserInfo)fc.getExternalContext().getSessionMap().get("userInfo");
 
 
当然,我们也可以用其它的方法得到session对象后,从session中取出实例。
 
对request级别的MBean,我们可从request对象中取得,代码如下:
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request 
= (HttpServletRequest)fc.getExternalContext().getRequest();
UserInfo ui 
= (UserInfo)request.getAttribute("user");
 
 
至于none类型的MBean,应该只能得到新的实例了。
 
当然,JSF提供了另外的访问MBean的方法,我们可以用如下的代码得到MBean的实例:
FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding 
=  context.getApplication().createValueBinding("#{user}"); 
UserBean user 
= (UserBean) binding.getValue(context); 
 
也可用如下的代碼直接得到MBean的一個屬性:
FacesContext context = FacesContext.getCurrentInstance(); 
ValueBinding binding 
=  context.getApplication().createValueBinding("#{user.name}"); 
String name 
= (String) binding.getValue(context); 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多