与复合组件一起使用p:outputLabel
时,我遇到了问题。我有带p:inputText
字段的复合组件(我从组件中删除了不相关的部分):
<cc:interface>
<cc:editableValueHolder name="myInput" targets="myInput"/>
<cc:attribute name="required" required="true" type="java.lang.Boolean" default="false"/>
</cc:interface>
<cc:implementation>
<p:inputText id="myInput" required="#{cc.attrs.required}"/>
</cc:implementation>
现在,我不会将此组件用于p:outputLabel
:
<p:outputLabel for="myComponent:myInput" value="#{resources['myLabel']}:"/>
<my:myComponent id="myComponent" required="#{myBean.required}"/>
一切正常,需要验证,也显示消息,但*
标签上没有标志,就像我将标签直接连接到p:inputText
组件时一样。另一方面,如果我required="true"
对所有内容进行硬编码p:inputText
都可以正常工作。
我调试org.primefaces.component.outputlabel.OutputLabelRenderer
并发现该组件被识别为UIInput
,但input.isRequired()
返回false。进一步调试发现该required
属性尚未在组件上定义,因此它返回false
为默认值 i UIInput
:
(Boolean) getStateHelper().eval(PropertyKeys.required, false);
此外,如果我只是p:outputLabel
在复合组件内移动,一切正常。就像 EL 稍后在复合组件内部进行评估?
我正在使用 Primefaces 3.5 和 Mojarra 2.1.14