我对表达式语言2 bean-view通信syntax.First of all.Is可能会有一个同名但不同scobes.if的托管bean。另一方面,通过表达式语言访问它们又是怎么回事?考虑会话中有一个名为DemoBean的属性,还有一个名为DemoBean的会话Scobed托管bean,如果我尝试像这个#{DemoBean} // refers bean或属性那样通过EL访问这个bean?他们说#{sessionScobe}是访问会话属性的方法,但是
#{sessionattributename}是有效的吗?当我将一个对象放到会话映射中时,它是引用还是复制?
发布于 2013-04-07 10:34:21
JSF的目标是为您管理会话属性本身,这意味着您应该忘记手动保存/恢复会话映射属性,因为您可以使用JSF的机制来完成它。
当您想要保存整个应用程序的一些信息时,请在托管bean中使用@ApplicationScoped注释。您可以使用@SessionScoped、@RequestScoped和@ViewScoped注释对会话、请求或具体视图执行同样的操作。
因此,如果您想在会话中存储某些属性:
@ManagedBean
@SessionScoped
public class SessionScopedBean{
public String sessionAttribute;
//Getter and setter
}您可以使用recover/change the value of the attribute of the bean使用FacesContext
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}
https://stackoverflow.com/questions/15859744
复制相似问题