Jsf 如何在UI和Java类之间共享同一个会话对象?
在JSF中,我们在Faces-config.xml中将许多managebean定义为会话范围。我想知道我们能否在UI和Java类之间共享相同的会话对象? 例如:Jsf 如何在UI和Java类之间共享同一个会话对象?,jsf,Jsf,在JSF中,我们在Faces-config.xml中将许多managebean定义为会话范围。我想知道我们能否在UI和Java类之间共享相同的会话对象? 例如: <managed-bean> <managed-bean-name>abcBean</managed-bean-name> <managed-bean-class>com.abc.com.ui.manage.AbcBean</managed-bean-class>
<managed-bean>
<managed-bean-name>abcBean</managed-bean-name>
<managed-bean-class>com.abc.com.ui.manage.AbcBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
abcBean
com.abc.com.ui.manage.AbcBean
一场
我可以在Java类中获取abcBean吗,比如通过FacesContext
请告知。如果我误解了你的意思,那么对不起 您可以通过以下方式获得任何ManagedBean(注入): 或:(来自/在任何Java类中)
@SuppressWarnings(“未选中”)
公共静态T findBean(字符串beanName){
FacesContext context=FacesContext.getCurrentInstance();
if(上下文==null)
返回null;
其他的
return(T)context.getApplication().evaluateExpressionGet(context,“#{”+beanName+“}”,Object.class);
}
会话范围的JSF托管bean存储为HTTP会话属性。因此,您还可以从HTTP会话中获取会话范围的JSF托管bean,这是从HTTP会话中获取会话属性的常用方法——使用bean名称作为键,但需求并不十分明确,特别是在“UI和Java类”方面。
@ManagedBean
@SessionScoped
public class AnotherBean implements Serializable {
@ManagedProperty(value="#{myBean}")
private MyBean myBean;
....
....
// you have to implement the this setter!!!!!
public void setMyBean(MyBean myBean) {
this.myBean = myeBean;
}
}
@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
if(context == null)
return null;
else
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}