Gee*_*eek 5 jsf design-decisions immediate-attribute
最初immediate
flag仅用于ActionSource
接口.但后来它也被添加到EditableValueHolder
界面中.设计决策的原因是什么?
Bal*_*usC 15
它用于以EditableValueHolder
相同的形式对几个组件的验证进行优先级排序.
想象一个包含输入组件的表单immediate="true"
,以及没有此属性的输入组件.立即输入将在应用请求值阶段(比通常早一个阶段)验证.非立即输入将在验证阶段(这是通常的阶段)进行验证.如果对至少一个立即输入的验证失败,则根本不会转换/验证非立即输入,因此不会生成任何转换/验证错误消息.这在具有复杂验证规则的表单中特别有用,其中在(立即)组件X的验证失败时验证组件Y没有意义.
当与immediate="true"
相同形式的命令按钮结合使用时,这将导致完全跳过所有非立即输入.一个好的现实世界的例子是一个登录表单,其中包含2个字段"username"和"password",required="true"
以及2个按钮:"login"和"password forgotten".您可以immediate="true"
输入"用户名"字段和"忘记密码"按钮以跳过required="true"
对密码字段的检查.
在黑暗的JSF 1.x年代,immediate="true"
通常(ab)经常被(ab)用作组合的黑客,valueChangeListener
并且FacesContext#renderResponse()
通常在级联下拉列表中.长话短说,这是一篇关于此的老博客文章.到目前为止,它使开发人员能够在更改a时执行辅助bean方法,<h:selectOneMenu>
而不会验证同一表单中的所有其他输入.但是现在,由于ajax很棒,这种黑客行为是不必要的.您可以在我们的<h:selectOneMenu>
维基页面底部找到此案例的concretre示例.
这些天,immediate="true"
仍然经常(ab)使用以便具有完全绕过所有其他输入的特定按钮,例如"上帝形式"反模式中的注销按钮(其中所有内容都被拼凑在一起<h:form>
),或者错误提交表单的取消按钮.当你开始immediate="true"
在其中一个输入上真正需要正确的方式时,这样的按钮就会中断.您最好以自己的形式放置这样的注销按钮,或者将其更改为仅处理自身(process="@this"
在PrimeFaces中).并且您最好更改这样的取消按钮,以便同步刷新页面<h:button value="Cancel" />
.如果表单绑定到请求/视图范围bean并且动态页面上禁用了浏览器缓存,则此方法可以正常工作.
归档时间: |
|
查看次数: |
3911 次 |
最近记录: |