我使用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"/>
有人可以解释这种行为吗?
答案 0 :(得分:0)
在JSF请求 - 响应周期中处理id和widgetVar属性时,EL评估尚未就绪。
有些相关链接:
Why JSF calls getters multiple times
答案 1 :(得分:0)
现在我发现了问题:调试输出(Glassfish 4.0,Mojarra 2.2.0)有时无法正确显示属性的实际状态。 widgetVar设置正确,可以在应用程序中使用,虽然它没有出现在调试输出中,所以问题只出现在调试输出中。我不明白为什么会这样。 我学到的唯一教训就是不要依赖调试输出。