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

Jsf 应用请求值和更新模型值之间的差异,jsf,lifecycle,Jsf,Lifecycle,我经常对这两个阶段产生怀疑。以下是我的理解: 应用请求值 在此阶段,提交的值来自请求参数。然后将请求值设置到backingbean中,即设置为组件UIInput 更新模型值 在此阶段,处理后的值从支持bean(UIInput)传输到托管bean。(这是我们自定义的JSFbean) 我认为我的理解是正确的。但是,读了几篇文章让我感到困惑。我想更清楚地说明这两个阶段。请澄清 应用请求值 在此阶段,提交的值来自请求参数。然后将请求值设置到backingbean中,即设置为组件UIInput

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

  • 应用请求值

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

    • 在此阶段,处理后的值从支持bean(UIInput)传输到托管bean。(这是我们自定义的JSFbean)
  • 我认为我的理解是正确的。但是,读了几篇文章让我感到困惑。我想更清楚地说明这两个阶段。请澄清

    应用请求值
    • 在此阶段,提交的值来自请求参数。然后将请求值设置到backingbean中,即设置为组件UIInput
    这并不完全正确。这些值没有设置到支持bean中。它们被设置为组件。对于组件树中的每个
    UIInput
    组件,基本上会发生以下情况:

    input.setSubmittedValue(request.getParameter(input.getClientId()));
    
    bean.setProperty(input.getValue());
    
    这里的
    输入
    是,而
    请求


    更新模型值
    • 在此阶段,处理后的值从支持bean(UIInput)传输到托管bean。(这是我们自定义的JSFbean)
    也不完全正确<代码>UIInput组件不是支持bean。对于组件树中的每个
    UIInput
    组件,基本上会发生以下情况:

    input.setSubmittedValue(request.getParameter(input.getClientId()));
    
    bean.setProperty(input.getValue());
    
    这里,bean和属性基于输入的valuebinding,例如
    value=“#{bean.property}”


    总之,在区分JSF组件树、JSF支持bean和JSF管理bean时,您的困惑是显而易见的。JSF组件树是您在JSP/Facelets页面中定义的,您可以通过以下方式获得。JSF支持bean是Javabean类,其属性使用EL绑定到组件树,如
    {bean.property}
    。JSF托管bean是这些Javabean类的具体实例。它们可以是请求范围、会话范围或应用程序范围(在JSF2.0中也可以是视图范围)。它是实际设置和检索值的托管bean

    另见

    嗨,巴卢斯克,我同意我混淆了支持bean和托管bean。请参阅我的问题:。这是正确的回答,但我没有正确理解。因此,所有的支持bean也是托管bean。但是,并非所有托管bean都是支持bean。这意味着,如果托管bean在类中具有UIComponent绑定属性(如UIInput),那么它被称为支持bean。我说的对吗?在等答案。如果我所说的是正确的,那么我清楚这两个阶段。不,那是不正确的。属性不一定必须是
    UIComponent
    。更重要的是,这一点都不是必需的(甚至连链接的调试JSF生命周期文章都解释了那些
    UIComponent
    绑定仅用于纯粹的演示目的,在现实世界中,只要您想对它们做更多的事,而不仅仅是获取/设置值,就应该使用它们)。我本人不同意波佐的回答,这确实是误导。支持bean和托管bean之间的区别最好在这一行代码中进行总结:
    BackingBean managedBean=newbackingbean()@Krishna:它们看起来确实一样。支持bean是绑定到JSF视图(即支持视图)的bean的(抽象)类定义。类路径中只有一个。托管bean是由JSF创建并放入范围的具体实例(即,由JSF管理)。克里希纳:好吧,你现在认为什么更有意义@顺便说一下,波佐在某个地方有一个公平的观点。一直叫他们托管豆子。这是完全正确的。