首先,仔细阅读以下内容:JSF2 Facelets 中的 JSTL ... 有意义吗?
总而言之,属性中的 EL 表达式id
是在视图构建时评估的。在您的特定情况下,根据症状,#{cc.attrs.pubId}
似乎仅在视图呈现时间可用,例如因为它是由var
迭代 JSF UI 组件定义的,或者因为它被定义为仅在视图构建时间之后设置的 bean 属性, ETC。
您需要采用不同的解决方案。我无法详细说明这一点,因为您没有说明您认为这将是解决方案的具体功能要求。但是,就这一点而言,您有两个选择:
确保id
(and binding
) 属性中的任何 EL 变量在视图构建期间可用。例如,使用<c:forEach>
代替<ui:repeat>
.
把它放在一个普通的 HTML 元素上。它在视图渲染期间进行评估。
<rich:popupPanel id="popupEditor">
<div id="#{cc.attrs.pubId}">
...
</div>
</rich:popupPanel>
或者也许你根本不需要它,你只是想了一个解决方案而没有真正遇到具体问题。当您的复合材料设计得当时,您应该不需要复合材料内的动态 ID。
<rich:popupPanel id="popupEditor">
...
</rich:popupPanel>
JSF 已经自动处理了它,因为复合组件固有地从NamingContainer
. 你只需要给它<my:composite>
自己一个固定的 ID。