1

我正在使用 Richfaces 4.3.3。

我有一个复合小部件。我传递了一个参数/属性,该参数/属性在该小部件中正确打印。如果我想将此变量(整数)添加到 a <rich:popupPanel>,则该值解析为 0 (整数的默认值)。

<rich:popupPanel id="popupEditor_#{cc.attrs.pubId}">
    #{cc.attrs.pubId}
</rich:popupPanel>

有趣的是,标签中的值解析正确。这是相位监听器问题吗?如果是,我该如何克服这个问题 - 仍然使用丰富的面孔组件?

4

1 回答 1

1

首先,仔细阅读以下内容:JSF2 Facelets 中的 JSTL ... 有意义吗?

总而言之,属性中的 EL 表达式id是在视图构建时评估的。在您的特定情况下,根据症状,#{cc.attrs.pubId}似乎仅在视图呈现时间可用,例如因为它是由var迭代 JSF UI 组件定义的,或者因为它被定义为仅在视图构建时间之后设置的 bean 属性, ETC。

您需要采用不同的解决方案。我无法详细说明这一点,因为您没有说明您认为将是解决方案的具体功能要求。但是,就这一点而言,您有两个选择:

  1. 确保id(and binding) 属性中的任何 EL 变量在视图构建期间可用。例如,使用<c:forEach>代替<ui:repeat>.

  2. 把它放在一个普通的 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。

于 2013-08-19T16:06:39.140 回答