了解JSF组件类的生命周期



组件的生命周期是多少?遍历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中无状态的用处是什么?

相关内容

  • 没有找到相关文章

最新更新