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

标签 jsf lifecycle

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

  • 应用请求值
  • 在这个阶段,提交的值来自请求参数。然后将请求值设置到支持 bean 中,即设置组件 UIInput
  • 更新模型值
  • 在此阶段,已处理的值从支持 bean (UIInput) 传输到托管 bean。 (这是我们自定义的 JSF bean)。

  • 我认为我的理解是正确的。但是,阅读几篇文章让我感到困惑。我想让我更清楚地了解这两个阶段。请澄清一下。

    最佳答案

    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。
    也可以看看
  • Debug JSF lifecycle
  • 关于jsf - 应用请求值和更新模型值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749451/

    相关文章:

    javascript - 如何将焦点设置到ui :repeat JSF中的最后一项

    jsf - :selectOneMenu in p:dataTable doesn't submit its value

    c# - 在代码后面的 gridview 事件处理程序中切换 DIV 可见性不起作用

    android - 意外恢复 "package name"而已经在 '' 包名称中恢复“Android 中的错误

    ios - Swift 中的 socket.io 出现意外的奇怪行为

    javascript - 当以编程方式更改输入值时,不会执行更改事件

    jsf - View 范围 bean 在导航 JSF 中是否存在

    html - 浏览器发起的重定向 GET 请求未成功

    android - android中的静态变量生命周期

    php - 一个 PHP 文件可以处理多个请求吗?