如果我正确地将 BalusC 2006 年伟大的帖子http://balusc.blogspot.ch/2006/09/debug-jsf-lifecycle.html中包含的信息与 Optimus Prime 更早的帖子http://cagataycivici.wordpress.com/2005结合起来/12/28/jsf_component_s_value_local/我得到以下信息:
我的理解:
- 在 APPLY_REQUEST_VALUES 阶段,
- 输入值被设置为 UI 组件的提交值属性(例如 inputComponent.setSubmittedValue ( "test"))。
- 在 PROCESS_VALIDATIONS 阶段,
- 从 submitValue 属性(可能是inputComponent.getSubmittedValue ())中读取相同的值,并在必要时用于转换。
- 如果转换成功或跳过,则将结果设置为组件的 value 属性(例如 inputComponent.setValue ( "test"))。
- 此外,submittedValue 会立即再次被擦除(例如inputComponent.setSubmittedValue (null))
- 从 UI 组件的 value 属性中读取(转换后的)值(大概是 inputComponent.getValue ())并进行验证。
- 验证后,读取支持 bean/模型的存储值(例如 myBean.getInputValue ( ))并与新转换和验证的值进行比较。如果不同,将调用 valueChangeListener 方法。
- 在 UPDATE_MODEL_VALUES 阶段,
- 新转换和验证的值最终存储在支持 bean 的属性字段中(例如 myBean.setInputValue ( "test"))。
问题:
- 它是否正确?
- 是否缺少一些东西来全面理解 POST 和将输入值保存在支持 bean 之间发生的事情?
- 在输入组件上使用 immediate="true" 时,我们只是将这些事件转移到 APPLY_REQUEST_VALUES 阶段,还是我们改变的不仅仅是事件的时间/顺序?