【问题标题】:What exactly is #{component} in EL?EL 中的#{component} 到底是什么?
【发布时间】:2015-05-16 03:26:24
【问题描述】:

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

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

但是我不明白如何引用必须作为第二个参数从 EL 传递的UIComponent。上面提到的错误报告建议我们可以使用#{component} 来引用它。谁能给我一个例子?

【问题讨论】:

    标签: jsf el uicomponents


    【解决方案1】:

    #{component} 是一个隐式 EL 变量,它在 EL 范围内引用 current UIComponent(另请参见 implicit EL objects)。您通常只能在组件的 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}');" />
    

    您也可以使用binding 属性让JSF 在视图构建期间将对Facelet 范围内的组件实例的引用。这样,组件引用将在视图渲染期间在 Facelet 中的任何位置可用。

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

    另见:

    【讨论】:

      【解决方案2】:

      p:widgetVarFromContext 在引用复合组件内的 PrimeFaces 小部件时很有用。同一页面上可能有多个组件实例。所以写widgetVar="expression"PF('expression') 是不可能的。会有多个同名的小部件。那么最好省略widgetVar 属性并使用生成的唯一属性,因为它基于clientId

      您不能在&lt;cc:implementation&gt; 中使用#{p:widgetVar('expression')},因为它会导致Cannot find component for expression "expression" referenced from "j_id1" 错误,而不是预期的PF('widget_expression')

      但是您可以使用#{p:widgetVarFromContext('expression', cc)},它将返回类似PF('widget_wrapperform_compositecomponent1_expression') 的内容。 cc 指的是复合组件实例的根。

      【讨论】:

      • 多么可爱的答案。
      • 请注意,问题是关于#{component},而不是#{p:widgetVarFromContext()}
      • 确实如此,而且您的解释非常完整。但是谷歌搜索 widgetVarFromContext 一次又一次地把我带到了这里。我的答案是我到达这里时正在寻找的那个。所以我写这篇文章是为了帮助我未来的自己。
      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 2013-05-29
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2013-05-05
      相关资源
      最近更新 更多