JavaBean與MBean詳解
首先從Model1中的JavaBean說起,大家知道,Model1的基本架構(gòu)就是JSP頁面通過JavaBean訪問數(shù)據(jù)層,那么JavaBean到底是什么東東呢?
其實JavaBean只是一個特別的Java類而已。在JavaBean中,對私有的域用getXXX和setXXX來實現(xiàn)存取,并且必須有一個無參數(shù)的構(gòu)造函數(shù),如下類就是一個JavaBean文件。
- package net.moon.beans;
- public class UserInfo {
- private String userName;
- private String password;
- public String getUserName(){
- return userName;
- }
- public String getPassword(){
- return password;
- }
- public void setUserName(String userName){
- this.userName = userName;
- }
- public void setPassword(String password){
- this.password = password;
- }
- //如果一個類中無構(gòu)造函數(shù),Java會為它加一個默認的空的無參數(shù)的構(gòu)造函數(shù),
- //因此,如無其它構(gòu)造函數(shù),可省略該構(gòu)造函數(shù)
- public UserInfo(){
- }
- }
需注意其中的格式要求,域名為***個單詞首字母小寫的(usernName),對應(yīng)一個域,分別有一個getUserName和setUserName兩個方法,來讀取和設(shè)置這一域,方法名為get/set + 域名(首字母大寫)。
做過Model1開發(fā)的人會知道,JavaBean的引入方式可以是使用標簽<jsp:useBean>來引入的,不需開發(fā)人員實例化即可產(chǎn)生一個該類的實例,因為實例是由Web容器產(chǎn)生的,所以我們必須提供無參數(shù)的構(gòu)造函數(shù)由Web容器來調(diào)用。
再來解釋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的名字,用于其它位置的調(diào)用。
managed-bean-class是這一MBean的完整路徑,用于指明該MBean的類文件位置。
managed-bean-scope是這一MBean的有效范圍。
下面再對manage-bean-scope進行一下詳細的解釋,其有效取值為:application, session, request, none。很容易理解,它們的存活周期分別如下:
Name Scope
Application 整個應(yīng)用
Session 整個對話
Request 整個請求
None 需要時,臨時
大家知道,JSF是以JSP為基礎(chǔ)的,那么,對于JSP的九大對象來說,這四種scope的信息到底是怎么存儲的呢?
◆經(jīng)過測試證明,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,應(yīng)該只能得到新的實例了。
當然,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);
【編輯推薦】