JSF - 关于生命周期的问题

mar*_*zzz 3 jsf page-lifecycle jsf-2

我今天在 JSF 上阅读了一篇关于 Lifecycle的文章

我很难理解这些要点:

1 - 阶段 3:过程验证 - 这是组件可以验证其新值的阶段。如果新值有效并且不同于先前值,则将创建值更改事件并将其放入队列中。所以在我们的例子中,如果用户在提交表单之前更改了名称,则与 Name 文本框对应的 UIInput 组件对象将创建一个 ValueChangeEvent 对象,并在此阶段结束时将其排队等待处理。这就是 valueChangeInput 方法中的支持 bean 被调用。

JSF 如何知道旧值和新值之间的区别?视图对象的实例是 2? 前一个(请求之前的那个)和新的?(其中包含最后一个进程 Apply request Values 添加的 FacesContext 上的值)

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

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

干杯

Bal*_*usC 5

JSF 如何知道旧值和新值之间的区别?视图对象的实例是 2? 前一个(请求之前的那个)和新的?(其中包含最后一个进程 Apply request Values 添加的 FacesContext 上的值)

旧值是当前模型值。新值是提交的值。通过以下示例,

<h:inputText value="#{bean.value}" />
Run Code Online (Sandbox Code Playgroud)

JSF 将基本上执行以下操作(为简洁起见,省略了转换/验证):

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

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

不完全是那样,但是是的,当调用操作完成时,渲染响应将启动。


那么,什么时候调用(bean 的)getter 方法?

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

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