Primefaces outputLabel dla komponentu kompozytowego
Mam problem z używaniemp:outputLabel
w przypadku użycia z komponentem kompozytowym. Mam komponent kompozytowyp:inputText
pole (usunąłem nieistotne części z komponentu):
<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>
Teraz nie będę używać tego komponentu zp:outputLabel
:
<p:outputLabel for="myComponent:myInput" value="#{resources['myLabel']}:"/>
<my:myComponent id="myComponent" required="#{myBean.required}"/>
Wszystko działa dobrze, wymagana walidacja, wyświetlany jest również komunikat, ale nie ma*
podpisz etykietę, tak jak w przypadku bezpośredniego łączenia etykiety zp:inputText
składnik. Jeśli ja, z drugiej strony, hardcoderequired="true"
nap:inputText
wszystko dziala.
Przeszukałamorg.primefaces.component.outputlabel.OutputLabelRenderer
i odkrył, że składnik jest rozpoznawany jakoUIInput
, aleinput.isRequired()
zwraca false. Dochodziło do tego dalsze debugowanierequired
atrybut nie jest jeszcze zdefiniowany w komponencie, więc zwracafalse
jako wartość domyślna iUIInput
:
(Boolean) getStateHelper().eval(PropertyKeys.required, false);
Ponadto, jeśli tylko się poruszyłemp:outputLabel
wewnątrz komponentu kompozytowego wszystko działa dobrze. Podobnie jak EL jest oceniane później wewnątrz komponentu kompozytowego?
Używam Primefaces 3.5 z Mojarra 2.1.14