ADF开发人员普遍认为,将迭代器绑定更改事件策略设置为ppr在性能方面不是一件好事,因为此策略会强制框架刷新每个请求上绑定到此迭代器的所有属性绑定。 这不是真的!
框架仅刷新在请求期间已更改的属性和依赖于已更改属性的属性。
让我们考虑一个简单的用例。 有一种形式:
迭代器的更改事件策略设置为ppr,这在JDeveloper 11gR2和12c中是默认设置。 “名字”和“姓氏”字段是自动提交的。 “全名”字段将通过姓和名的串联来计算。 因此,在名字和姓氏的设置器中,我们有一个对应的方法调用:
public void setLastname(String value) {setAttributeInternal(LASTNAME, value);setFullname(getFirstname() + " " + getLastname());
}
让我们看一下输入“姓氏”后框架生成的响应内容:
作为对修改后的姓氏的响应,框架将仅部分刷新两个输入组件-姓氏和全名。 全名将被刷新,因为其值在请求期间已更改。 表单上的其余组件不参与部分请求。
让我们考虑更复杂的用例。
我们将在表格上以“全名”字段的标签显示“标题”字段的值:
<af:inputText label="#{bindings.Title.inputValue}"value="#{bindings.Fullname.inputValue}" required="#{bindings.Fullname.hints.mandatory}"columns="#{bindings.Fullname.hints.displayWidth}"maximumLength="#{bindings.Fullname.hints.precision}"shortDesc="#{bindings.Fullname.hints.tooltip}" id="itFullName">
</af:inputText>
因此,每次选择标题时,“全名”的标签都应更新。 当然,“标题”字段是自动提交的。 让我们看一下响应内容:
尽管在请求过程中“ Full Name”(全名)的值未更改,但输入组件将被刷新,因为其label属性指向更改后的字段的值。 同样,在部分请求期间将仅刷新这两个字段。
而已!
翻译自: https://www.javacodegeeks.com/2014/07/smart-auto-ppr-change-event-policy.html