gpt4 book ai didi

jsf - 为什么将 "immediate"属性添加到 EditableValueHolders?

转载 作者:行者123 更新时间:2023-12-04 16:20:44 25 4
gpt4 key购买 nike

最初 immediate标志仅用于 ActionSource界面。但后来它被添加到 EditableValueHolder界面也。设计决策的原因是什么?

最佳答案

它用于对多个 EditableValueHolder 进行优先验证相同形式的组件。
想象一个包含输入组件的表单 immediate="true"以及没有此属性的输入组件。即时输入将在应用请求值阶段(比平时早一个阶段)进行验证。非即时输入将在验证阶段(通常阶段)进行验证。如果至少有一个即时输入的验证失败,则非即时输入根本不会被转换/验证,因此不会生成任何转换/验证错误消息。这在具有复杂验证规则的表单中特别有用,当(立即)组件 X 的验证无论如何都失败时验证组件 Y 是没有意义的。
immediate="true" 结合使用时在相同形式的命令按钮上,这将导致所有非立即输入被完全跳过。一个很好的真实示例是一个登录表单,其中包含两个字段“用户名”和“密码”,required="true"和 2 个按钮:“登录”和“忘记密码”。你可以把 immediate="true"在“用户名”字段和“忘记密码”按钮上跳过 required="true"检查密码字段。
在黑暗的 JSF 1.x 时代,immediate="true"也经常(ab)用作与 valueChangeListener 结合使用的 hack。和 FacesContext#renderResponse() ,在级联下拉列表中更常见。长话短说,这里有一个 old blog article在那。最重要的是,它使开发人员能够在更改 <h:selectOneMenu> 时执行支持 bean 方法。如果没有验证相同形式的所有其他输入。但是这些天来,由于 ajax 非常棒,这种 hack 是不必要的。您可以在 our <h:selectOneMenu> wiki page 底部找到此案例的具体示例。 .
这些天来,immediate="true"仍然经常(ab)使用,以便拥有一个完全绕过所有其他输入的特定按钮,例如“上帝形式”反模式中的注销按钮(所有内容都被放在一个巨大的 <h:form> 中),或者一个错误地提交表单的取消按钮。当您开始真正需要 immediate="true" 时,这样的按钮会损坏。输入之一的正确方法。您最好将这样的注销按钮放在自己的形式中,或者将其更改为仅处理自身(PrimeFaces 中的 process="@this")。而且你最好把这样的取消按钮改成<h:button value="Cancel" />同步刷新页面.如果表单绑定(bind)到请求/ View 范围的 bean 并且浏览器缓存为 disabled,则此方法可以正常工作。在动态页面上。
也可以看看:

  • Should immediate="true" never be used when dealing with an AJAXified JSF 2.0 component?
  • Trying to understand immediate="true" skipping inputs when it shouldn't
  • 关于jsf - 为什么将 "immediate"属性添加到 EditableValueHolders?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071512/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com