在托管Bean中访问另一个托管Bean

在托管Bean中访问另一个托管Bean
如果有很多托管Bean,想要从其中一个托管Bean访问其他的托管Bean,这里有六中方法。
可以使用:
  1)getVariableResolver
  2)createValueBinding
  3)getELResolver (since JSF 1.2)
  4)createValueExpression (since JSF 1.2)
  5)getRequestMap
  6)getSessionMap.
举例:假设有两个托管Bean



< managed - bean >
   
< managed - bean - name > myBean1 </ managed - bean - name >
   
< managed - bean - class > mypackage.MyBean1 </ managed - bean - class >
   
< managed - bean - scope > request </ managed - bean - scope >
</ managed - bean >
< managed - bean >
< managed - bean - name > myBean2 </ managed - bean - name >
   
< managed - bean - class > mypackage.MyBean2 </ managed - bean - class >
   
< managed - bean - scope > session </ managed - bean - scope >
</ managed - bean >

托管Bean myBean1和myBean2是支撑Bean MyBean1.java和MyBean2.java的实例,它们可以通过JSF页面来访问。不管它们的managed-bean-scope是request还是session。
只是要注意的是,getRequestMap在托管Bean被设置成request的时候使用,getSessionMap在托管Bean被设置成session的时候使用。



< h:form >    
    
< h:commandButton action = " #{myBean1.action1} "  value = " action1 "   />
    
< h:commandButton action = " #{myBean1.action2} "  value = " action2 "   />
    
< h:commandButton action = " #{myBean1.action3} "  value = " action3 "   />
    
< h:commandButton action = " #{myBean1.action4} "  value = " action4 "   />
    
< h:commandButton action = " #{myBean1.action5} "  value = " action5 "   />
    
< h:commandButton action = " #{myBean1.action6} "  value = " action6 "   />
    
< h:outputText binding = " #{myBean2.text} "   />
</ h:form >

MyBean1.java:

package  mypackage;
import  javax.faces.context.FacesContext;
public   class  MyBean1 
{    
    
//  Using VariableResolver. NOTE: this is deprecated since JSF 1.2!   
     public   void  action1() 
    
{       
        FacesContext context 
=  FacesContext.getCurrentInstance();       
        MyBean2 myBean2 
=  (MyBean2) context.getApplication().getVariableResolver().resolveVariable(context,  " myBean2 " );
        myBean2.getText().setValue(
" action1 " );   
    }
   
    
    
//  Using ValueBinding. NOTE: this is deprecated since JSF 1.2!   
     public   void  action2() 
    
{       
        FacesContext context 
=  FacesContext.getCurrentInstance(); 
        MyBean2 myBean2 
=  (MyBean2) context.getApplication().createValueBinding( " #{myBean2} " ).getValue(context);       
        myBean2.getText().setValue(
" action2 " );   
    }
   
    
    
//  Using ELResolver. NOTE: this is implemented since JSF 1.2!  
     public   void  action3() 
    
{       
        FacesContext context 
=  FacesContext.getCurrentInstance();
        MyBean2 myBean2 
=  (MyBean2) context.getELContext().getELResolver().getValue(context.getELContext(),  null " myBean2 " );
        myBean2.getText().setValue(
" action3 " );
    }
   
    
    
//  Using ValueExpression. NOTE: this is implemented since JSF 1.2!   
     public   void  action4() 
    
{       
        FacesContext context 
=  FacesContext.getCurrentInstance();
        MyBean2 myBean2 
=  (MyBean2) context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),  " #{myBean2} " , MyBean2. class ).getValue(context.getELContext());
        myBean2.getText().setValue(
" action4 " );   
    }
  
    
    
//  Using RequestMap. NOTE: myBean2 should be request scoped!   
     public   void  action5() 
    
{       
        Object object 
=  FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get( " myBean2 " );
        
//  This only works if myBean2 is request scoped.       
         if  (object  !=   null
        
{           
            MyBean2 myBean2 
=  (MyBean2) object;
            myBean2.getText().setValue(
" action5 " );       
        }
   
    }
   
    
    
//  Using SessionMap. NOTE: myBean2 should be session scoped!   
     public   void  action6() 
    
{       
        Object object 
=   FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get( " myBean2 " );
        
//  This only works if myBean2 is session scoped.       
         if  (object  !=   null
        
{         
            MyBean2 myBean2 
=  (MyBean2) object;
            myBean2.getText().setValue(
" action6 " ); 
        }
   
    }


}


MyBean2.java:

package  mypackage;
import  javax.faces.component.html.HtmlOutputText;
public   class  MyBean2 
{   
    
private  HtmlOutputText text;   
    
    
public  HtmlOutputText getText() 
    
{       
        
return  text;   
    }
   
    
    
public   void  setText(HtmlOutputText text) 
    
{       
        
this .text  =  text;   
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值