关于scope之间的引用
暗夜骑士0376
2011-05-20
如果我有一个sessionScope的managerBean里面有一个属性 service专门提供各种各样的操作当然这个service是无状态的。当我进入一个页面是requestScope的操作的页面的时候,我不想再注入一个service,就是想使用sessionScope的service,从理论上来说,这个是可能的。requestScope是可以调用sessionScope里面的属性,但是就是不知道有什么的方法在后台进行显示的得到sessionScope 里的这个service 对象
|
|
暗夜骑士0376
2011-05-21
[size=medium]还是我自己解决了,有三种方式取得后台的bean对象。
在request,session范围内就不用说了 在JSF FacesContext的范围内三种方式 第一中是: FacesContext context = FacesContext.getCurrentInstance(); ELContext elctx = context.getELContext();ExpressionFactory facotory = context.getApplication().getExpressionFactory(); String name = (String) facotory.createValueExpression(elctx, "#{sesscope.name}", String.class).getValue(elctx); 第二种是: String name1 = ((SessionBeanCase) context.getApplication().getELResolver().getValue(elctx, null, "sesscope")).getName(); 第三种是: String name2 = context.getApplication().evaluateExpressionGet(context, "#{sesscope.name}", String.class); 其中第三种可以是在Inject的范围下使用的。也可以不是。如果是在FacesContex的范围,我们可以使用注解的方式 @ManagerProperty(value="#{bean}") private Bean bean; 参考页面:http://stackoverflow.com/questions/2633112/jsf-get-managed-bean-by-name[/size] |
|
remoteJavaSky
2011-07-02
为什么不直接注入呢 ,第一种,第二种方法费了那么大力气,只需一个注入一下就方面用了,让bean的获取交给容器。特别的CDI1.0基于Context的注入,不就是帮我们管理这些bean了么
|