我可以看到EL属性存储在组件的StateHelper
映射中的getAttributes()
和字符串文字中。什么是生命周期以及为什么需要两个容器?
EL ValueExpression
评估的生命周期中的哪些点? (每次调用getStateHelper.eval()
时?)
答案 0 :(得分:8)
StateHelper
为组件开发人员(直接子类UIComponent
而非标准组件)提供了便利,可以跨请求维护组件的状态。它在JSF视图状态保存中起着不可或缺的作用,底层契约提供的不仅仅是隐藏组件属性的方法。
通过子类化StateHelper
,组件开发人员可以更方便地键入saveState
的{{1}}和restoreState
方法,这些方法应该保证组件(和子组件)使其状态正确保持(按照配置的状态保存模式)JSF Impl。
将StateHolder
映射与基本上是组件变量藏匿的映射进行对比,并且在单个请求的生命周期中最相关。除了保留东西之外,它不提供任何其他服务。
getAttributes()
在组件的生命周期中评估至少 2x:ValueExpression
和RESTORE_VIEW
阶段,原因显而易见:第一个给出适当的渲染组件,第二个,将验证和转换后的值提交给支持bean