当我阅读文章 Listen and debug JSF lifecycle phases 时 在@BalusC的帮助下,我在理解这篇文章时遇到了一些麻烦。
Add immediate="true" to UIInput and UICommand 时,它说:
注意所有具有立即的组件:,因为跳过了更新模型值阶段,未设置值绑定,并且值绑定getter将返回null。但价值仍然可用......
注意其他组件没有立即:同一表单中没有设置为immediate =“true”的任何其他UIInput组件将不会被转换,验证或更新,但在幕后inputComponent.setSubmittedValue(submittedValue)将在执行action()方法之前执行。你可以检索......
这是否意味着无论是否有immediate
, Update model values phase
总会被跳过,因为h:commandButton中的immediate="true"
?如果是这样,支持bean中的值不会改变,对吧?
但是,在文章的last paragraph中,它总结了“何时使用immediate = true”并提到:
- 如果在UIInput和UICommand组件中都设置了应用请求值阶段,那么对于没有设置此属性的任何UIInput组件,将跳过更新模型值阶段。使用此选项可以跳过整个表单的处理,但某些字段除外(立即执行)。例如。登录表单中的“忘记密码”按钮,其中包含必需的即时用户名字段和必需但非直接的密码字段。
我很困惑,因为我认为 Process validations Phase
和 Update model values Phase
,无论有没有immediate
一次您在immdediate=true
中以相同的格式设置h:commandButton
。
我必须误解一些事情,请帮我澄清一下。 提前谢谢!
答案 0 :(得分:1)
这部分确实需要澄清。
摘要中的含义是作业,它通常在上述阶段执行(即应用请求值,处理验证和更新模型值),即使它们发生在应用请求中价值观阶段。
我已相应更新了这篇文章。