gpt4 book ai didi

jsf-2 - 没有 bean 属性的 JSF 组件绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 00:48:07 24 4
gpt4 key购买 nike

以下代码究竟是如何工作的:

#{aaa.id}
<h:inputText id="txt1" binding="#{aaa}"/>

我的意思是,通常组件绑定(bind)通过在 bean 中指定一个属性(类型为 UIComponent)来工作。在这里,没有 bean 也没有属性,但名称“aaa”被正确绑定(bind)(显示组件 id - “txt1”)。它是如何工作的/它在哪里指定?

谢谢

更新: The JSF2.0 Spec [pdf] (第 3.1.5 章)说:

"A component binding is a special value expression that can be used to facilitate “wiring up” a component instance to a corresponding property of a JavaBean... The specified ValueExpression must point to a read-write JavaBeans property of type UIComponent (or appropriate subclass)."

最佳答案

在构建 View 树期间,它已被置于默认的 EL 范围内(此时所有 binding 属性——以及标签处理程序的属性,如 JSTL <c:xxx> 和 JSF <f:xxx>——正在被评估)。它在 View 树的渲染过程中通过普通的 EL 方式显示。 View 树的渲染发生在 View 树构建之后,所以它是这样工作的。这段代码并不是像您对源代码所期望的那样“逐行”运行。
我不能指出您指定的单个引用,因为没有。您必须阅读这两个 EL specJSF spec分别做 1+1=2。
顺便说一句,为了避免新开发人员之间的混淆并避免与 EL 范围内的现有变量发生冲突,您可以使用 java.util.HashMap faces-config.xml 中声明如下的请求范围内:

<managed-bean>
<description>Holder of all component bindings.</description>
<managed-bean-name>components</managed-bean-name>
<managed-bean-class>java.util.HashMap</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
并被如下使用
#{components.aaa.id}
<h:inputText id="txt1" binding="#{components.aaa}"/>
这是更多的自我记录。
也可以看看:
  • How does the 'binding' attribute work in JSF? When and how should it be used?
  • 关于jsf-2 - 没有 bean 属性的 JSF 组件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8168302/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com