ICEfaces迁移至PrimeFaces时#{window}作用域警告问题咨询
迁移问题解析与指南
警告原因解释
JSF1085警告的核心原因如下:
@CustomScoped(value = "#{window}")是ICEfaces专属的自定义窗口作用域,完全依赖ICEfaces框架提供的底层作用域上下文实现。- 迁移到PrimeFaces后,你已移除所有ICEfaces依赖,Mojarra无法找到
#{window}对应的作用域实例,因此无法将DashboardBean推入该作用域,触发警告。 - 换成
@ViewScoped能解决问题,是因为这是JSF 2.0+的标准作用域,Mojarra和PrimeFaces都原生支持,其生命周期与原ICEfaces的window作用域高度重叠(均绑定到当前视图窗口的生命周期),能满足原Bean的作用域需求。
清晰的迁移步骤
1. 依赖清理与替换
- 彻底移除所有ICEfaces相关的Maven/Gradle依赖,包括核心库、组件库等。
- 引入PrimeFaces 12依赖,确保与Mojarra 2.2.10版本兼容(PrimeFaces 12官方支持Mojarra 2.2.x)。
- 确认JDK 8与Tomcat 8.5的兼容性(Tomcat 8.5原生支持JDK 8)。
2. 作用域替换
- ICEfaces的自定义作用域(如
window、viewport等)全部替换为JSF标准作用域:- 原
window作用域 →@ViewScoped(JSF标准)或PrimeFaces的CDI版@ViewScoped(若项目转向CDI) - 原
application/session/request作用域直接沿用JSF标准注解即可
- 原
- 若计划转向CDI,建议将
@ManagedBean替换为@Named,配合CDI版作用域注解(如javax.faces.view.ViewScoped或javax.enterprise.context.ViewScoped)。
3. 组件与API适配
- 将所有ICEfaces组件标签(如
<ice:xxx>)替换为对应的PrimeFaces组件(如<p:xxx>),注意组件属性、事件处理的差异:- 例如ICEfaces的
<ice:commandButton>对应PrimeFaces的<p:commandButton>,AJAX属性从partialSubmit改为ajax="true"
- 例如ICEfaces的
- 适配Mojarra 2.2的API变化:
- 规范
h:outputStylesheet/h:outputScript的library属性使用 - 处理JSF 2.2新增的视图参数、流作用域等特性(若涉及)
- 规范
4. 测试与问题排查
- 逐个页面测试核心功能,重点排查AJAX请求、组件渲染、Bean作用域相关问题
- 关注Tomcat日志中的警告/错误,针对Mojarra 2.2的新特性或废弃API进行调整
补充说明
- 若需要更细粒度的作用域控制,PrimeFaces可配合CDI的
@ConversationScoped实现,可根据业务需求选择 - 迁移过程中优先保留JSF标准API,减少对框架专属特性的依赖,能提升后续版本迁移的便利性
内容的提问来源于stack exchange,提问作者Andrea P.
相关产品推荐
相关产品推荐

