首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EL会话属性和托管bean访问

EL会话属性和托管bean访问
EN

Stack Overflow用户
提问于 2013-04-07 06:51:16
回答 1查看 2.1K关注 0票数 0

我对表达式语言2 bean-view通信syntax.First of all.Is可能会有一个同名但不同scobes.if的托管bean。另一方面,通过表达式语言访问它们又是怎么回事?考虑会话中有一个名为DemoBean的属性,还有一个名为DemoBean的会话Scobed托管bean,如果我尝试像这个#{DemoBean} // refers bean或属性那样通过EL访问这个bean?他们说#{sessionScobe}是访问会话属性的方法,但是

#{sessionattributename}是有效的吗?当我将一个对象放到会话映射中时,它是引用还是复制?

EN

回答 1

Stack Overflow用户

发布于 2013-04-07 10:34:21

JSF的目标是为您管理会话属性本身,这意味着您应该忘记手动保存/恢复会话映射属性,因为您可以使用JSF的机制来完成它。

当您想要保存整个应用程序的一些信息时,请在托管bean中使用@ApplicationScoped注释。您可以使用@SessionScoped@RequestScoped@ViewScoped注释对会话、请求或具体视图执行同样的操作。

因此,如果您想在会话中存储某些属性:

代码语言:javascript
复制
@ManagedBean
@SessionScoped
public class SessionScopedBean{

    public String sessionAttribute;

    //Getter and setter

}

您可以使用recover/change the value of the attribute of the bean使用FacesContext

代码语言:javascript
复制
FacesContext context = FacesContext.getCurrentInstance();
SessionScopedBean bean = (SessionScopedBean) context.getApplication()
    .evaluateExpressionGet(context, "#{sessionScopedBean}", SessionScopedBean.class);
bean.setSessionAttribute("value");

记住,默认情况下,JSF bean使用bean的名称命名,第一个字符是小写的。还请记住,如果您不初始化自己,这个bean在第一次命中时将是。您可以以一种简单的方式 in the bean you want to initialize并执行它,例如在您的登录页面中。这确保bean将在会话的其余部分保持活动。

最后,这就是从视图访问会话属性的方式:

#{sessionScopedBean.sessionAttribute}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15859744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档