У меня проблема с использованием 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