我经常对这两个阶段产生怀疑。以下是我的理解:
我认为我的理解是正确的。但是,阅读几篇文章让我感到困惑。我想让我更清楚地了解这两个阶段。请澄清一下。
最佳答案
Apply Request Values
- In this phase, the submitted values are coming from the request parameter. Then the request values are set into the backing bean ie.setting to components UIInput
这并不完全正确。这些值未设置到支持 bean。它们被设置为组件。基本上每个
UIInput
都会发生以下情况组件树中的组件:input.setSubmittedValue(request.getParameter(input.getClientId()));
这里input
是 UIInput
和 request
是 HttpServletRequest
.Update Model Values
- In this phase, processed values are transferred from backing bean (UIInput) to managed beans. (It is our custom defined JSF beans).
也不完全正确。
UIInput
组件不是支持bean。基本上每个 UIInput
都会发生以下情况组件树中的组件:bean.setProperty(input.getValue());
在这里,bean 和属性基于输入的值绑定(bind),例如value="#{bean.property}"
.总而言之,您的困惑显然在于区分 JSF 组件树、JSF 支持 bean 和 JSF 托管 bean。 JSF 组件树是您在 JSP/Facelets 页面中定义的组件树,您可以通过
FacesContext#getViewRoot()
获得. JSF 支持 bean 是 Javabean 类,其属性使用 EL 绑定(bind)到组件树,例如 #{bean.property}
. JSF 托管 bean 是这些 Javabean 类的具体实例。它们可以是请求、 session 或应用程序范围的(在 JSF 2.0 中也可以查看范围)。实际设置和检索值的是托管 bean。也可以看看
关于jsf - 应用请求值和更新模型值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749451/