我的项目需要深入了解JSF 2.0,因此我决定彻底研究它。我正在阅读JSF Lifecyle Debug,这是一篇关于JSF生命周期的很好的文章。在阅读这篇文章时,我有以下疑问。
如果这是一个初始请求,在
还原视图阶段
将创建一个空视图,并直接进入渲染响应阶段
。此时没有状态可保存。那么在渲染响应阶段
中实际发生了什么?当我运行示例时,有点困惑。文章指出,
Apply Request Values
阶段会在inputComponent.setSubmittedValue()
中设置检索到的输入值。如果验证和转换通过,则该值将在inputComponent.setValue(value)
中设置,并且inputComponent.setSubmittedValue(null)
将运行。在同一点上,文章指出,如果在下一个后续请求中更改了值,则与每个后续请求上始终为空的提交值进行比较,将调用valueChangeListener
。这意味着,即使我们没有更改值,由于提交值将始终为空,valueChangeListener也将总是被调用?我对这个说法感到困惑。有人能详细解释一下吗?文章指出了
immediate
属性的使用。如果在输入组件上设置了immediate
属性,则理想情况下会跳过Process Validation Phase
,但所有转换和验证都会在Apply Request Values
中进行。我的观点是,在转换和验证仍在进行时,跳过第三阶段的好处是什么?检索到的值是什么意思?
我想知道,如果一个视图上有五个字段,JSF 是否会将这些值的某个集合制作成列表,并在应用请求值
和处理验证
阶段逐个迭代它们?
在本文最后所述的使用 immediate
属性的情况下。根据我的理解,如果在输入组件和命令组件中都设置了 immediate 属性,则对于没有immediate
属性的任何属性,它将跳过从应用请求值到调用应用的阶段。那么最后一句话“密码忘记”按钮在具有必填且立即用户名字段和必填但非立即密码字段的登录表单中是什么意思?
我知道这些是非常基础的疑问,但对这些主题的清晰度肯定有助于加强 JSF 知识。