熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JavaBean與MBean詳解

2013-11-23 18:51:24  來源: Java核心技術 

  

  首先從Model中的JavaBean說起大家知道Model的基本架構就是JSP頁面通過JavaBean訪問數據層那麼JavaBean到底是什麼東東呢?

  其實JavaBean只是一個特別的Java類而已在JavaBean中對私有的域用getXXX和setXXX來實現存取並且必須有一個無參數的構造函數如下類就是一個JavaBean文件

  package netmoonbeans;    
   public class UserInfo {   
   private String userName;    
   private String password;    
   public String getUserName(){   
   return userName;    
   }   
   public String getPassword(){   
   return password;    
   }   
   public void setUserName(String userName){   
   thisuserName = userName;    
   }   
   public void setPassword(String password){   
   thispassword = password;    
   }   
   //如果一個類中無構造函數Java會為它加一個默認的空的無參數的構造函數   
   //因此如無其它構造函數可省略該構造函數   
   public UserInfo(){   
   }   
   }   

  需注意其中的格式要求域名為第一個單詞首字母小寫的(usernName)對應一個域分別有一個getUserName和setUserName兩個方法來讀取和設置這一域方法名為get/set + 域名(首字母大寫)

  做過Model開發的人會知道JavaBean的引入方式可以是使用標簽<jsp:useBean>來引入的不需開發人員實例化即可產生一個該類的實例因為實例是由Web容器產生的所以我們必須提供無參數的構造函數由Web容器來調用

  再來解釋JSF中的MBean其實MBean就是一個JavaBean因此它有著和JavaBean相同的要求

  最後是MBean的配置JSF的MBean需要在facesconfig文件中做配置配置方法如下

  <managedbean>   
       <description>demo of config</description>   
       <displayname>userInfo</displayname>   
       <managedbeanname>user</managedbeanname>   
       <managedbeanclass>netmoonbeansUserInfo</managedbeanclass>   
       <managedbeanscope>session</managedbeanscope>   
   </managedbean>   

  對其中的managedbeannamemanagedbeanclass和managedbeanscope做一下解釋

managedbeanname是這一MBean的名字用於其它位置的調用

  managedbeanclass是這一MBean的完整路徑用於指明該MBean的類文件位置

  managedbeanscope是這一MBean的有效范圍

  下面再對managebeanscope進行一下詳細的解釋其有效取值為application session request none很容易理解它們的存活周期分別如下

  Name          Scope
Application  整個應用
Session      整個對話
Request      整個請求
None         需要時臨時

  大家知道JSF是以JSP為基礎的那麼對於JSP的九大對象來說這四種scope的信息到底是怎麼存儲的呢?

  ◆經過測試證明scope為applicatoin的MBean的實例保存在ServletContext中也就是JSP中的application中因此我們可以用如下的方法得到某個類的引用 FacesContext fc = FacesContextgetCurrentInstance();
UserInfo ui = (serInfo)fcgetExternalContext()getApplicationMap()get(user);

  ◆對session級別的MBean我們可以用如下方法得到其引用
FacesContext fc = FacesContextgetCurrentInstance();
UserInfo ub = (UserInfo)fcgetExternalContext()getSessionMap()get(userInfo);
當然我們也可以用其它的方法得到session對象後從session中取出實例

  ◆對request級別的MBean我們可從request對象中取得代碼如下
FacesContext fc = FacesContextgetCurrentInstance();
HttpServletRequest request = (HttpServletRequest)fcgetExternalContext()getRequest();
UserInfo ui = (UserInfo)requestgetAttribute(user);

  ◆至於none類型的MBean應該只能得到新的實例了

  當然JSF提供了另外的訪問MBean的方法我們可以用如下的代碼得到MBean的實例

FacesContext context = FacesContextgetCurrentInstance();
ValueBinding binding = contextgetApplication()createValueBinding(#{user});
UserBean user = (UserBean) bindinggetValue(context);

  也可用如下的代碼直接得到MBean的一個屬性

  FacesContext context = FacesContextgetCurrentInstance();
ValueBinding binding = contextgetApplication()createValueBinding(#{username});
String name = (String) bindinggetValue(context);


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25866.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.