我常常对这两个阶段产生怀疑。以下是我的理解:
应用请求值
更新模型值
我认为我的理解是正确的。但是,阅读一些文章让我感到困惑。我想在这两个阶段让我更清楚。请澄清一下。
答案 0 :(得分:19)
应用请求值
- 在此阶段,提交的值来自请求参数。然后将请求值设置到辅助bean中,即设置为组件UIInput
这不完全正确。这些值未设置到支持bean中。它们被设置为组件。基本上,组件树中的每个UIInput
组件都会发生以下情况:
input.setSubmittedValue(request.getParameter(input.getClientId()));
此处input
为UIInput
,request
为HttpServletRequest
。
更新模型值
- 在此阶段,已处理的值从辅助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,其值实际已设置和检索。