我可以看到 EL 属性存储在组件映射中的StateHelper
和字符串文字中。getAttributes()
生命周期是什么?为什么需要两个容器?
EL 在生命周期中的哪些点进行ValueExpression
评估?(每次getStateHelper.eval()
调用?)
StateHelper
为组件开发人员(直接子类化而不是标准组件)提供了方便,可以UIComponent
跨请求维护组件的状态。它在 JSF 视图状态保存中起着不可或缺的作用,并且底层契约提供的不仅仅是一种存储组件属性的方法。
通过子类化StateHelper
,组件开发人员可以更方便地键入 JSF Impl 的saveState
和restoreState
方法StateHolder
,这些方法应该保证组件(和子组件)的状态正确持久(根据配置的状态保存模式)。
相比之下,getAttributes()
map 基本上是组件变量的存储,并且在单个请求的生命周期中主要相关。除了保存东西,它不提供其他服务。
ValueExpression
在组件的生命周期中至少评估2 次:RESTORE_VIEW
和UPDATE_MODEL_VALUES
阶段,原因很明显:第一个是对组件进行适当的渲染,第二个是向支持 bean 提交经过验证和转换的值