以下代码如何工作:
#{aaa.id}
<h:inputText id="txt1" binding="#{aaa}"/>
Run Code Online (Sandbox Code Playgroud)
我的意思是,通常组件绑定工作,通过在bean中指定属性(类型为UIComponent).这里没有bean也没有属性但是名称"aaa"被正确绑定(显示组件id - "txt1").它是如何工作的/指定的位置?
谢谢
更新:JSF2.0规范[pdf](第3.1.5章)说:
"组件绑定是一种特殊的值表达式,可用于促进将组件实例"连接"到JavaBean的相应属性...指定的ValueExpression必须指向UIComponent类型的读写JavaBeans属性(或适当的)子类)."
Bal*_*usC 18
在构建视图树期间(当所有binding属性 - 以及像JSTL <c:xxx>和JSF 这样的标记处理程序的属性<f:xxx>正在被评估时),它被放在默认的EL范围中.在渲染视图树期间,它通过普通EL方式显示.在构建视图树之后,会发生视图树的渲染,因此它以这种方式工作.这并不是说这个代码是"逐行"运行的,正如您对源代码所期望的那样.
我不能指出你指定的单一参考,因为没有.您必须分别阅读EL规范和JSF规范并执行1 + 1 = 2.
顺便说一句,为了避免新开发人员之间的混淆并避免与EL范围中的现有变量发生冲突,您可以java.util.HashMap在请求范围中使用a ,该范围在以下方面声明如下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>
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用
#{components.aaa.id}
<h:inputText id="txt1" binding="#{components.aaa}"/>
Run Code Online (Sandbox Code Playgroud)
这更像是自我记录.
| 归档时间: |
|
| 查看次数: |
14170 次 |
| 最近记录: |