我今天正在阅读关于JSF生命周期的article。
我很难理解这些要点:
1 - 阶段3:流程验证 - 这是组件可以验证其新值的阶段。 如果新值有效且与先前值不同,则将创建值更改事件并将其放入队列中。因此,在我们的示例中,如果用户在提交表单之前更改了名称,则ValueChangeEvent对象将由UIInput组件对应于Name文本框创建,并在此阶段结束时排队等待处理。这是如何调用支持bean中的valueChangeInput方法。
JSF如何知道旧值和新值之间的区别? View对象的实例是2?前一个(请求前的那个)和新的? (其中包含最后一个进程添加的FacesContext上的值,应用请求值)
2 - 阶段5:调用应用程序 - 一旦将请求的所有值都成功设置到辅助bean,将处理在应用请求值阶段排队的操作事件。 在我们的例子中,提交按钮操作方法。
因此,它直接将FacesContext的实例发送到将UI元素(及其值)转换为Html的最后阶段(渲染响应)。那么,什么时候调用getter方法(bean的)?
干杯
答案 0 :(得分:4)
JSF如何知道旧值和新值之间的区别? View对象的实例是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方法(bean的)?
是的,只有当它们在视图中绑定时才会在渲染响应期间发生。
您可以找到here另一篇以更实际的方式解释JSF生命周期的文章。