我可以看到EL属性存储在组件的StateHelper
映射中的getAttributes()
和String文字中。什么是生命周期,为什么需要两个容器?
还在生命周期的哪些时间评估EL ValueExpression
? (每次调用getStateHelper.eval()
吗?)
最佳答案
StateHelper
为组件开发人员(直接继承UIComponent
而不是标准组件的子类)提供了便利,使其可以在请求中维护组件的状态。它在JSF View 状态保存中起着不可或缺的作用,而基础契约(Contract)不仅提供了隐藏组件属性的方法。通过对
StateHelper
进行子类化,组件开发人员可以更方便地键入saveState
的restoreState
和StateHolder
方法,这些方法可以保证组件(和子组件)的状态正确(按照配置的状态保存模式)持久存在于JSF中。没错与
getAttributes()
映射相反,ValueExpression
映射基本上是组件变量的存储,并且在单个请求的生命周期中最相关。除了保留东西外,它不提供其他服务。 RESTORE_VIEW
在组件的生存期内至少被评估为至少 2x:UPDATE_MODEL_VALUES
和ojit_code阶段,原因显而易见:第一个提供适当的组件呈现,第二个将经过验证和转换的值提交到支持bean