首先从Model中的JavaBean说起大家知道Model的基本架构就是JSP页面通过JavaBean访问数据层那么JavaBean到底是什么东东呢?
其实JavaBean只是一个特别的Java类而已在JavaBean中对私有的域用getXXX和setXXX来实现存取并且必须有一个无参数的构造函数如下类就是一个JavaBean文件
packagenetmoonbeans;
publicclassUserInfo{
privateStringuserName;
privateStringpassword;
publicStringgetUserName(){
returnuserName;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetUserName(StringuserName){
thisuserName=userName;
}
publicvoidsetPassword(Stringpassword){
thispassword=password;
}
//如果一个类中无构造函数Java会为它加一个默认的空的无参数的构造函数
//因此如无其它构造函数可省略该构造函数
publicUserInfo(){
}
}
需注意其中的格式要求域名为第一个单词首字母小写的(usernName)对应一个域分别有一个getUserName和setUserName两个方法来读取和设置这一域方法名为get/set + 域名(首字母大写)
做过Model开发的人会知道JavaBean的引入方式可以是使用标签<jsp:useBean>来引入的不需开发人员实例化即可产生一个该类的实例因为实例是由Web容器产生的所以我们必须提供无参数的构造函数由Web容器来调用
再来解释JSF中的MBean其实MBean就是一个JavaBean因此它有着和JavaBean相同的要求
最后是MBean的配置JSF的MBean需要在facesconfig文件中做配置配置方法如下
<managedbean>
<description>demoofconfig</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);