应用请求值和更新模型值之间的差异

时间:2011-01-20 16:04:14

标签: jsf lifecycle

我常常对这两个阶段产生怀疑。以下是我的理解:

  1. 应用请求值

    • 在此阶段,提交的值来自请求参数。然后将请求值设置到辅助bean中,即设置为组件UIInput
  2. 更新模型值

    • 在此阶段,已处理的值从辅助bean(UIInput)传输到托管bean。 (这是我们自定义的JSF bean)。
  3. 我认为我的理解是正确的。但是,阅读一些文章让我感到困惑。我想在这两个阶段让我更清楚。请澄清一下。

1 个答案:

答案 0 :(得分:19)

  

应用请求值

     
      
  • 在此阶段,提交的值来自请求参数。然后将请求值设置到辅助bean中,即设置为组件UIInput
  •   

这不完全正确。这些值未设置到支持bean中。它们被设置为组件。基本上,组件树中的每个UIInput组件都会发生以下情况:

input.setSubmittedValue(request.getParameter(input.getClientId()));

此处inputUIInputrequestHttpServletRequest


  

更新模型值

     
      
  • 在此阶段,已处理的值从辅助bean(UIInput)传输到托管bean。 (这是我们自定义的JSF bean)。
  •   

也不完全正确。 UIInput组件不是支持bean。基本上,组件树中的每个UIInput组件都会发生以下情况:

bean.setProperty(input.getValue());

这里,bean和property基于输入的valuebinding,例如: value="#{bean.property}"


总而言之,您的困惑显然​​是区分JSF组件树,JSF支持bean和JSF托管bean。 JSF组件树是您在JSP / Facelets页面中定义的树,您可以通过FacesContext#getViewRoot()获得。 JSF支持bean是Javabean类,其属性使用EL绑定到组件树,例如#{bean.property}。 JSF托管bean是那些Javabean类的具体实例。它们可以是请求,会话或应用程序作用域(在JSF 2.0中也可以查看作用域)。它是托管bean,其值实际已设置和检索。

另见