【ADF】AutoSubmit、PartialSubmit、PartialTriggers 区别与联系

来源:互联网 发布:单片机汇编set 编辑:程序博客网 时间:2024/06/09 20:35
Web2.0应用的两大特点就是异步请求响应和局部页面刷新。
比如:一个天气预报页面内容包括:国家下拉列表、省下拉列表、城市下拉列表,以及选择城市的最近三天天气情况。
当我们选择国家后,省的下拉列表应该自动被刷新(页面其它地方不刷新);选择省后,城市的下拉列表应该自动被刷新(页面其它地方不刷新);选择不同的城市时,最近三天天气情况应该自动刷新(页面其它地方不刷新)。

总之,我们希望页面能够局部、动态地刷新,请求发送后不必等待响应就能马上做其它事情,而响应回来后,页面相关组件会得到通知,然后自动更新。
AutoSubmit、PartialSubmit、PartialTriggers这三个参数的主要作用就是完成异步请求响应和局部页面刷新。下面逐一说明。

1. autoSubmit 只在输入组件上才有的一个属性。例如:
< af:inputText id="productpriceIT" label="Price" autoSubmit="true" value="#{advertisement.price}" >

当设置为true后,改变该组件的值后(焦点离开后),该组件的值(注意,不是整个form)将被提交到服务器,即进入【转换、验证、更新模型、重新呈现】的各个生命周期阶段(注意先后次序)。
表单中的其它组件不受任何影响,表单也并未提交,只是该组件被异步地提交了。这意味着,即使表单中还有其它必填项,也不会提示“该项不能为空”,因为没有触发到这些必填项。
如果在Manage Bean中更新了该组件的值,必须要刷新该组件才能显示新值,即进入【重新呈现】阶段。刷新该组件有两种方法:
(1)在页面中设置autoSubmit + partialTriggers 刷新(这里指向自己)
< af:inputText id="productpriceIT" label="Price" autoSubmit="true" value="#{advertisement.price}" partialTriggers="productpriceIT">
(2)在Manage Bean 中用代码刷新
AdfFacesContext.getCurrentInstance().addPartialTarget(this.productpriceIT);

2. partialSubmit 只在命令组件上才有的一个属性。例如:
< af:commandLink id="showImageCL" text="#{areaAndCategoryProvider.showAreaImage?'Hide image':'Show image'}" actionListener="#{areaAndCategoryProvider.toggleImage}" partialSubmit="true" partialTriggers="showImageCL" />

默认情况下,单击命令链接或按钮将导致表单提交或页面导航,整个页面将被刷新和重载,其页面效果是页面好像抖动了一下,用户感受稍差一些。
这时,我们可以使用partialSubmit + partialTriggers,来刷新某个组件,其页面效果是只会刷新组件,而不会刷新整个页面。
当然,表单还是会被提交,如果表单中有必填项,将会验证出错,这一点和没有设置partialSubmit=true的按钮或链接一样,二者区别是:设置了partialSubmit=true的按钮或链接界面效果不会抖动,同时点击后会启动 ppr 请求,如果设置了partialTriggers 的话。

与autoSubmit的区别是,后者仅处理更改的组件本身以及在其 partialTriggers 属性中包含引用的所有组件,不会触发表单中的必填项的验证,除非这些必填项的partialTriggers 指向设置了autoSubmit=true的组件。

值得注意的是,CommandToolBarButton 默认partialSubmit =true,所以如果你需要刷新某个组件,必须设置partialTriggers,否则页面不会被刷新。
而CommandButton 默认partialSubmit =false,默认会刷新整个页面。
原创粉丝点击