组件的生命周期是多少?遍历UIInput
源,我注意到有一个称为value
的局部字段,它本质上是组件的值。我还注意到,在处理完所有转换和验证之后,我们比较组件的新值与旧值,如果它们不同,就触发valueChange事件。实际上,下面这段代码接管队列事件:
if (isValid()) {
Object previous = getValue();
setValue(newValue);
setSubmittedValue(null);
if (compareValues(previous, newValue)) {
queueEvent(new ValueChangeEvent(this, previous, newValue)); // <-----
}
}
但是如果组件在任何请求后被杀死,我们将在发送请求时简单地获得ValueChangeEvent
。因此,我假定组件的生命周期与组件绑定到属性的bean的生命周期相同。但我找不到任何文件保证……
组件实例是请求作用域。只有委托给UIComponent#getStateHelper()
的组件属性才具有视图作用域。也就是说,它们保存在JSF视图状态中。这包括getValue()
正在委托给的ValueHolder#getLocalValue()
。
@Override
public Object getValue() {
return isLocalValueSet() ? getLocalValue() : super.getValue();
}
仅在无状态视图上,即具有<f:view transient="true">
的页面,您所描述的行为"当我们发送请求"时,我们将简单地获得ValueChangeEvent "
参见:
- 如何'绑定'属性在JSF中工作吗?何时以及如何使用?
- 扩展UIComponentBase时如何保存状态 在JSF中无状态的用处是什么?