JavaBean与MBean详解

开发 后端
本文向您介绍JavaBean与JSF中MBean的区别,通过实例和配置对JSF中的Mbean的调用和有效范围作出解释。

首先从Model1中的JavaBean说起,大家知道,Model1的基本架构就是JSP页面通过JavaBean访问数据层,那么JavaBean到底是什么东东呢?

其实JavaBean只是一个特别的Java类而已。在JavaBean中,对私有的域用getXXX和setXXX来实现存取,并且必须有一个无参数的构造函数,如下类就是一个JavaBean文件。

  1. package net.moon.beans;    
  2. public class UserInfo {   
  3. private String userName;    
  4. private String password;    
  5. public String getUserName(){   
  6. return userName;    
  7. }   
  8. public String getPassword(){   
  9. return password;    
  10. }   
  11. public void setUserName(String userName){   
  12. this.userName = userName;    
  13. }   
  14. public void setPassword(String password){   
  15. this.password = password;    
  16. }   
  17. //如果一个类中无构造函数,Java会为它加一个默认的空的无参数的构造函数,   
  18. //因此,如无其它构造函数,可省略该构造函数   
  19. public UserInfo(){   
  20. }   
  21. }   

需注意其中的格式要求,域名为***个单词首字母小写的(usernName),对应一个域,分别有一个getUserName和setUserName两个方法,来读取和设置这一域,方法名为get/set + 域名(首字母大写)。

做过Model1开发的人会知道,JavaBean的引入方式可以是使用标签<jsp:useBean>来引入的,不需开发人员实例化即可产生一个该类的实例,因为实例是由Web容器产生的,所以我们必须提供无参数的构造函数由Web容器来调用。

再来解释JSF中的MBean,其实MBean就是一个JavaBean,因此它有着和JavaBean相同的要求。

***是MBean的配置,JSF的MBean需要在faces-config文件中做配置,配置方法如下:

  1. <managed-bean>   
  2.     <description>demo of config</description>   
  3.     <display-name>userInfo</display-name>   
  4.     <managed-bean-name>user</managed-bean-name>   
  5.     <managed-bean-class>net.moon.beans.UserInfo</managed-bean-class>   
  6.     <managed-bean-scope>session</managed-bean-scope>   
  7. </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);

 

【编辑推荐】

  1. 自学Javabean迅速成为Java高手
  2. JavaBeans、EJB和POJO详解
  3. JavaBean与EJB的不同
  4. 给JavaBeans增加XPath功能
  5. JavaBean使用技巧
责任编辑:佚名 来源: cnblogs
相关推荐

2009-06-15 10:21:07

基于JBossMBean

2009-07-03 17:33:06

JSP中调用JavaB

2009-07-06 17:07:11

JSP实例

2009-02-01 10:04:44

JSPJavaBeanJavaBean应用

2009-06-12 11:46:39

JavaBeanEJB

2009-02-16 09:25:43

EJBJavaBeanWebSphere

2009-07-07 15:57:29

JSP购物车

2014-12-12 10:13:12

JavaScript

2011-06-24 09:39:05

2009-07-09 16:01:27

2009-07-17 14:57:41

SwingWorkerSwing程序

2011-10-10 09:11:09

Java

2009-06-25 13:50:56

JavaBean优点

2009-09-02 09:44:01

JSP和JavaBea

2009-06-25 14:26:07

JSPJavaBeanServlet

2013-03-21 15:27:09

LinuxUnix

2010-06-03 15:04:31

NAP IPSEC配置

2011-08-04 18:09:32

Xcode 技巧 文档

2009-06-18 12:00:43

2009-07-07 17:23:08

Java Servle
点赞
收藏

51CTO技术栈公众号