理解JSF组件类生命周期

理解JSF组件类生命周期,jsf,jsf-2,Jsf,Jsf 2,组件的寿命是多少?遍历UIInput源代码时,我注意到有一个名为value的本地字段,它本质上就是组件的值。我还注意到,在处理所有转换和验证之后,我们比较组件的新值和旧值,以及它们是否是不同的fire valueChange事件。事实上,下面是处理quing事件的一段代码: if (isValid()) { Object previous = getValue(); setValue(newValue); setSubmittedValue(null);

组件的寿命是多少?遍历
UIInput
源代码时,我注意到有一个名为
value
的本地字段,它本质上就是组件的值。我还注意到,在处理所有转换和验证之后,我们比较组件的新值和旧值,以及它们是否是不同的fire valueChange事件。事实上,下面是处理quing事件的一段代码:

if (isValid()) {
     Object previous = getValue();
     setValue(newValue);
     setSubmittedValue(null);
     if (compareValues(previous, newValue)) {
         queueEvent(new ValueChangeEvent(this, previous, newValue)); // <-----
     }
}
if(isValid()){
对象previous=getValue();
设置值(新值);
setSubmittedValue(空);
if(比较值(上一个,新值)){

queueEvent(new ValueChangeEvent(this,previous,newValue));//组件实例是请求作用域。只有委托给的组件属性是视图作用域。也就是说,它们保存在JSF视图状态中。这包括
getValue()
委托给的其他组件属性

@Override
public Object getValue() {
    return isLocalValueSet() ? getLocalValue() : super.getValue();
}
只有在无状态视图上,即带有
的页面上,才会出现您描述的行为“我们只需在发送请求时获取ValueChangeEvent”

另见:

ViewState解码和设置
ComponentStateHelper
UIInput的
StateHelper
)的
defaultMap
属性是否确实是在ViewBuild时间内执行的?因此,如果组件的值处于ViewState,则我们有
isLocalValueSet()
返回
true
而getValue()方法仅返回映射中的值?不,它是在还原视图阶段执行的。另请参见a.o.了解差异。至于
isLocalValueSet()
,这只是另一个属性(也有视图范围!)指示已设置本地值,因为具有空本地值是有效的,因此空检查将不起作用,否则组件将通过
getValue()错误地返回模型值
。明白了,谢谢。我想这与问题没有直接关系,但是JSF引擎在ViewState上是如何工作的呢?既然你说了[…]是视图范围。也就是说,它们保存在JSF视图状态中,我猜如果
ViewId
发生更改,我们将创建一个空视图状态。是否正确?关键是
javax.faces.ViewState
请求参数的值。