为什么复合组件的属性不能与Primefaces属性一起使用?

时间:2014-02-06 10:08:46

标签: jsf jsf-2 primefaces

我使用Primefaces创建了一个复合组件:

<composite:interface>
    <composite:attribute name="testText" />
</composite:interface>

<composite:implementation>
    <p:button id="testid#{cc.attrs.testText}" value="#{cc.attrs.testText}"
              widgetVar="testWidgetVar#{cc.attrs.testText}" />
</composite:implementation>

当我使用属性为testText =“test”

的自定义组件时

我得到以下行为:

  • “测试”显示在按钮上(如预期的那样)

  • 按钮组件的ID是“testidtest”(正如预期的那样),

  • 但是widgetVar正如预期的那样“testWidgetVartest”!

菜单组件的调试输出如下:

<Button disableClientWindow="false" disabled="false" escape="true" iconPos="left" id="testidtest" inView="true" includeViewParams="false" inline="false" rendered="true" target="_self" transient="false" widgetVar="testWidgetVar"/>

有人可以解释这种行为吗?

2 个答案:

答案 0 :(得分:0)

在JSF请求 - 响应周期中处理id和widgetVar属性时,EL评估尚未就绪。

有些相关链接:

Why JSF calls getters multiple times

EL evaluation in a JSF page is not sequential

Javatutorial: JSF 2 Lifecycle

答案 1 :(得分:0)

现在我发现了问题:调试输出(Glassfish 4.0,Mojarra 2.2.0)有时无法正确显示属性的实际状态。 widgetVar设置正确,可以在应用程序中使用,虽然它没有出现在调试输出中,所以问题只出现在调试输出中。我不明白为什么会这样。 我学到的唯一教训就是不要依赖调试输出。