JSF在一个治理Bean中引用另一个管理Bean
JSF在一个管理Bean中引用另一个管理Bean
JSF在一个管理Bean中引用另一个管理Bean
如果一个管理Bean中的属性和方法跟另一个管理Bean一样,为了代码的重用而不是再次重写相同的代码,我们会想在这个Bean中直接引用那个管理Bean。
看示例:
----1---JavaCode-----
----2---faces-config.xml---------
注意:现在的netmanage 还是空的,如果直接执行引用Bean的方法
if(netmanage!=null)netmanage.manageNet();
netmanage 是 null ;
不过可以在初始化NetManageBean 时执行你
想要的方法。只有在当前构造函数执行以后才执行setNetmanage方法,给netmanage赋值。
执行顺序是:
先到构造函数中,但不执行里面的方法,先初始化普通属性,即给属性赋值,然后才
执行构造函数中的方法。
当构造函数执行完成对象生成之后,才初始化本管理Bean中引用的其它管理Bean类的对象,如开始初始化NetManageBean ,给netmanage 赋值。
要想在本类初始化的时候就得到引用的管理Bean的实例,可以改变执行顺序,将本类的构造函数中的方法移到setNetmanage方法中,并在this.netmanage = netmanage;之后执行。
修改 1 的代码为:
----3---JavaCode-----
这样if(netmanage!=null)netmanage.manageNet();就不会为空了;
JSF在一个管理Bean中引用另一个管理Bean
如果一个管理Bean中的属性和方法跟另一个管理Bean一样,为了代码的重用而不是再次重写相同的代码,我们会想在这个Bean中直接引用那个管理Bean。
看示例:
----1---JavaCode-----
public class PRequestHisIpBean{ // 引用另外的管理Bean private NetManageBean netmanage ; public PRequestHisIpBean(){ // 执行引用Bean的方法 if(netmanage!=null)netmanage.manageNet(); } public NetManageBean getNetmanage() { if(netmanage==null)netmanage=new NetManageBean(); return netmanage; } public void setNetmanage(NetManageBean netmanage) { this.netmanage = netmanage; } }
----2---faces-config.xml---------
<managed-bean> <managed-bean-name>netmanage</managed-bean-name> <managed-bean-class> com.system.NetManageBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>RequestIp</managed-bean-name> <managed-bean-class> com.report.PRequestHisIpBean </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>netmanage</property-name> <value>#{netmanage}</value> </managed-property> </managed-bean>
注意:现在的netmanage 还是空的,如果直接执行引用Bean的方法
if(netmanage!=null)netmanage.manageNet();
netmanage 是 null ;
不过可以在初始化NetManageBean 时执行你
想要的方法。只有在当前构造函数执行以后才执行setNetmanage方法,给netmanage赋值。
执行顺序是:
先到构造函数中,但不执行里面的方法,先初始化普通属性,即给属性赋值,然后才
执行构造函数中的方法。
当构造函数执行完成对象生成之后,才初始化本管理Bean中引用的其它管理Bean类的对象,如开始初始化NetManageBean ,给netmanage 赋值。
要想在本类初始化的时候就得到引用的管理Bean的实例,可以改变执行顺序,将本类的构造函数中的方法移到setNetmanage方法中,并在this.netmanage = netmanage;之后执行。
修改 1 的代码为:
----3---JavaCode-----
public class PRequestHisIpBean{ // 引用另外的管理Bean private NetManageBean netmanage ; public PRequestHisIpBean(){ } public NetManageBean getNetmanage() { if(netmanage==null)netmanage=new NetManageBean(); return netmanage; } public void setNetmanage(NetManageBean netmanage) { this.netmanage = netmanage; // 执行引用Bean的方法 if(netmanage!=null)netmanage.manageNet(); } }
这样if(netmanage!=null)netmanage.manageNet();就不会为空了;