栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSF-会话范围的托管bean没有在会话反序列化上重新注入依赖项

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSF-会话范围的托管bean没有在会话反序列化上重新注入依赖项

尽管Bozho提供的解决方案可行,但我不想将代理对象引入当前未使用它们的应用程序中。我的解决方案不理想,但是可以完成工作。

我将瞬变场留在原处:

transient private ApplicationData _applicationData;

我还保留了setter,以便JSF可以

SessionData
在首次创建对象时初始设置引用:

public void setApplicationData(ApplicationData applicationData) {    _applicationData = applicationData;}

我所做的更改是使用getter方法进行的。

SessionData
现在,该对象中的方法需要停止直接访问该
_applicationData
字段,而是通过getter获取引用。吸气剂将首先检查空引用。如果为null,则通过来获取托管bean
FacesContext
。这里的约束是,
FacesContext
仅在请求的生命周期内可用。

private ApplicationData getApplicationData() {    if (_applicationData == null) {        _applicationData = JSFUtilities.getManagedBean( "applicationData",  // name of managed bean ApplicationData.class);        if (_applicationData == null) { throw new IllegalStateException(     "Cannot get reference to ApplicationData object");        }    }    return _applicationData;}

如果有人在意,这是我的

getManagedBean()
方法的代码:

public static <T> T getManagedBean(String managedBeanKey, Class<T> clazz)        throws IllegalArgumentException {    Validate.notNull(managedBeanKey);    Validate.isTrue(!managedBeanKey.isEmpty());    Validate.notNull(clazz);    FacesContext facesContext = FacesContext.getCurrentInstance();    if (facesContext == null) {        return null;    }    Validate.notNull(facesContext.getApplication());    ELResolver resolver = facesContext.getApplication().getELResolver();    Validate.notNull(resolver);    ELContext elContext = facesContext.getELContext();    Validate.notNull(elContext);    Object managedBean = resolver.getValue(        elContext, null, managedBeanKey);    if (!elContext.isPropertyResolved()) {        throw new IllegalArgumentException( "No managed bean found for key: " + managedBeanKey);    }    if (managedBean == null) {        return null;    } else {        if (clazz.isInstance(managedBean)) { return clazz.cast(managedBean);        } else { throw new IllegalArgumentException(     "Managed bean is not of type [" + clazz.getName() +     "] | Actual type is: [" + managedBean.getClass().getName()+     "]");        }    }}

而且不要接听我的验证电话。开发完成后,我将其淘汰!:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454371.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号