JSF - 关于生命周期的问题

问题描述:

我今天在阅读关于JSF生命周期的articleJSF - 关于生命周期的问题

我有一些麻烦明白以下几点:

1 - 第3阶段:处理检验 - 这是在其中该部件可以验证它们的新值的相位。 如果新值有效且与先前值不同,则会创建值更改事件并将其放入队列中。因此,在我们的示例中,如果用户在提交表单之前更改名称,则ValueChangeEvent对象将由名称文本框对应的UIInput组件对象创建,并在此阶段末尾将其排队以供处理。。这是valueChangeInput方法在支持bean被调用。

JSF如何知道旧值与新值的区别?视图对象的实例是2?前一个(请求前的)和新的? (它们具有上一个进程添加的FacesContext上的值,应用请求值)

2 - 阶段5:调用应用程序 - 一旦请求的所有值已成功设置为支持bean,应用请求值阶段将被处理。 在我们的例子中,提交按钮的操作方法。

因此,它直接发送FacesContext的实例到最后阶段(渲染响应),将UI元素(及其值)转换为Html。那么,什么时候(bean的)getter方法被调用?

干杯

JSF怎样才能知道旧值和新之间的差异?视图对象的实例是2?前一个(请求前的)和新的? (它们具有上一个处理添加的FacesContext上的值,应用请求值)

旧值是当前模型值。新值是提交的值。随着下面的例子中,

<h:inputText value="#{bean.value}" /> 

JSF将基本上执行以下操作(略去了转换/验证):

Object oldValue = bean.getValue(); 
Object newValue = request.getParameter(clientId); 
if (oldValue == null ? newValue != null : !oldValue.equals(newValue)) { 
    // Create and queue ValueChangeEvent. 
} 

所以它发送的FacesContext直接的实例最后阶段(渲染响应)将UI元素(及其值)转换为Html。

不完全是这样,但是,当调用操作完成时,呈现响应将会启动。


所以,那是什么时候(的豆)的getter方法被称为?

是的,这只会在渲染响应时发生,只有当它们绑定在视图中。

您可以在另一篇文章中找到here,它以更实用的方式解释了JSF生命周期。

+0

关于第一点的答案:好的,它从bean中获取值。但是,如果bean是请求作用域,那么当我创建视图时,所有的值都将为空。 (并且应该调用valueChange处理程序?)。关于第二点:我不明白。因此,它将视图实例(FacesContext)中的值设置为生命周期的第一个点,并且如果验证(或转换)不发生错误,它将从bean中获取相同的值?声音bizzarre,这是我说我不明白:)我今天下午看了你的文章......但仍然不清楚。我需要再练习一次...... – markzzz 2010-11-27 20:26:43