У меня проблема с использованием 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
. Если я, с другой стороны, hardcode required="true"
на p:inputText
, все работает нормально.
Я отлаживал org.primefaces.component.outputlabel.OutputLabelRenderer
и обнаружил, что этот компонент распознан как UIInput
, но input.isRequired()
возвращает false. Дальнейшая отладка обнаружила, что атрибут required
еще не определен на компоненте, поэтому он возвращает false
как значение по умолчанию я UIInput
:
(Boolean) getStateHelper().eval(PropertyKeys.required, false);
Кроме того, если я просто перемещаю p:outputLabel
внутри составного компонента, все работает нормально. Как EL оценивается позже в составном компоненте?
Я использую Primefaces 3.5 с Mojarra 2.1.14