关于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了么
Global site tag (gtag.js) - Google Analytics