【问题标题】:JSF - Question about LifecycleJSF - 关于生命周期的问题
【发布时间】:2011-05-16 14:56:30
【问题描述】:

我今天正在阅读 article 关于 JSF 上的生命周期。

我在理解这些方面有些困难:

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

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

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

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

干杯

【问题讨论】:

    标签: jsf jsf-2 page-lifecycle


    【解决方案1】:

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

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

    <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 的最后阶段(渲染响应)。

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


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

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

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

    【讨论】:

    • 关于第一点的答案:好的,它从bean中获取值。但是,如果 bean 是请求范围的,那么当我创建视图时,所有值都将为空。 (并且应该调用 valueChange 处理程序?)。关于第二点:我不明白。所以它在生命周期的第一点设置视图实例(FacesContext)中的值,如果验证(或转换)不出错,它从 bean 中获取相同的值?听起来很奇怪,那是我说我不明白 :) 我今天下午看了你的文章......但仍然不清楚。我又要练习了……
    • 在bean的构造函数或后构造函数中预设的值不会为空。当提交的值与初始模型值不同时,将调用值更改侦听器。如果没有错误,它将显示模型值(在更新模型值阶段根据提交的值设置!)。如果有错误,会显示提交的值(因为错误无法设置模型值)。
    • 一步一步来(否则我会更混乱)。 FacesContext 是具有由“旧模型”(保存到 Bean)获取的值的对象,对吗? (在生命周期的第一点创建。我谈论回发请求......)
    • 不,FacesContext 是一种 JSF 生命周期管理器。它知道一切。它知道有哪些请求参数。它知道那里有哪些托管 bean。它知道那里有哪些验证器/转换器。它知道组件树的结构。它知道它处于生命周期的哪个阶段。它负责根据它所知道的信息从头到尾执行 JSF 生命周期。它不“包含”任何值。模型值只是在托管 bean 中。你了解基本的 JSP/Servlet API 吗?
    • 不会跳过这些阶段。 bean 将被重新创建。对于请求范围的 bean,在 bean 的(后)构造期间设置的任何值都将用作“旧”值。
    猜你喜欢
    • 2011-05-18
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多