没有bean属性的JSF组件绑定

下面的代码如何工作:

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

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

谢谢

更新:JSF2.0规范(第3.1.5章)说:“组件绑定是一个特殊的值expression式,可以用来将组件实例连接到JavaBean的相应属性…指定的ValueExpression必须指向types为UIComponent(或适当的子类)的读写JavaBeans属性。

在构build视图树的过程中(即当所有的binding属性 – 像JSTL <c:xxx>和JSF <f:xxx>这样的标记处理器的属性被评估时),它被放在默认的EL范围内。 在渲染视图树的过程中,它通过普通的EL方法显示。 视图树的渲染发生视图树的构build之后 ,所以它就是这样工作的。 这并不是说这段代码像你期待的那样从“逐行”运行。

如果没有指定,我不能指出你的一个引用。 您必须分别阅读EL规范和JSF规范,并执行1 + 1 = 2。

顺便说一下,为了避免新开发人员之间的混淆,并避免在EL范围内与现有variables发生冲突,可以在请求范围中使用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}"/> 

这是更自我logging。

也可以看看:

  • “绑定”属性在JSF中如何工作? 何时以及如何使用?