EL中的#{component}究竟是什么?

cgh*_*lai 3 jsf el uicomponents

根据https://code.google.com/p/primefaces/issues/detail?id=4720,ComponentUtils.resolveWidgetVar(String expression, UIComponent component)自2013年以来,该功能在Primefaces中可用.它可以通过该"#{p:widgetVarFromContext(searchExpression, component)}"功能在EL中使用.

这在多个组件具有相同ID NamingContainer但不同但仍存在于同一视图中的情况下非常有用.在这种情况下,该#{p:widgetVar(searchExpression)}函数仅返回找到的最后一个函数.

我不明白如何引用UIComponent必须作为EL的第二个参数传递.上面提到的错误报告表明我们可以使用它来引用它#{component}.任何人都可以提供一个例子吗?

Bal*_*usC 6

#{component}是一个隐式EL变量,引用EL范围中的当前值UIComponent(另请参见隐式EL对象).您通常只能在组件的HTML属性或模板文本子项中引用它.

例如,在<h:inputText>它的情况下,它将引用UIInput类的实例,其中包括isValid()方法.

<h:inputText id="foo" required="true"
    style="background: #{component.valid ? '' : 'pink'}"
    onclick="alert('Client ID of this component is #{component.clientId}');" />
Run Code Online (Sandbox Code Playgroud)

您还可以使用binding属性让JSF在视图构建时间内对Facelet范围中的组件实例进行引用.这样,在视图渲染时,组件参考将在Facelet中的任何位置可用.

<script>alert('Client ID of foo component is #{foo.clientId}');</script>
<h:inputText binding="#{foo}" />
Run Code Online (Sandbox Code Playgroud)

也可以看看: