/ / Ako odkazovať na komponent v kompozitnej zložke pri použití prevodníka - jsf, jsf-2, facelets, composite-component

Ako odkazovať na komponent vo vnútri kompozitného komponentu pri použití prevodníka - jsf, jsf-2, facelets, composite-component

Mám zloženú zložku, ktorá sa skladá hlavne z komponenty selectManyCheckbox. Vzhľadom k tomu, že by mala byť navrhnutá generickým spôsobom, prejdem do selectItems, ajax manipulácia atď z volajúcej úrovne pomocou

<composite:insertChildren/>

To funguje celkom dobre pre väčšinu vecí. Teraz musím použiť túto kompozitnú súčasť s konvertorom. Pretože konvertor (druh Omnifaces "ListConverter) nie je potrebný po celú dobu (niekedy chcem mať hodnotu-viazanie konkrétnych subjektov, ktoré spätne vyberajú položky, niekedy nie), chcel by som to prejsť ako už spomenuté časti (napr. selectItems, manipulácia s udalosťami ajax).

Vzhľadom na to je potrebné použiť značku konvertora "s" pre "atribút odkazovať na komponent vnútri kompozitného komponentu. Aspoň to je to, čo chápem.

Bohužiaľ neviem, akú hodnotu by mala byťpoužité. Musím uviesť názov kompozitného komponentu (menoviteho kontajnera)? Musím použiť nástroj clientId? Skúsil som veľa kombinácií, ale konvertor nebol vyvolaný. Hneď ako vložím značku konvertora do definície kompozitného komponentu, funguje to.

Aby sme to uľahčili, predpokladajme, že mám nasledovné:

<composite:interface>
<composite:attribute name="value" required="true"/>
</composite:interface>

<composite:implementation>
[...]
<h:selectManyCheckbox id="#{cc.attrs.id}" value="#{cc.attrs.value}">
<composite:insertChildren/>
</h:selectManyCheckbox>
[...]
</composite:implementation>

Táto zložka by sa mala používať nasledovne:

<my:selectManyCheckbox id="myComponent" value="...">
<f:selectItems value="..."/>
<o:converter for="___" converterId="..."/>
</my:selectManyCheckbox>

Možno mi niekto môže naznačiť, aká hodnota by mala byť daná atribútu "za".

odpovede:

3 pre odpoveď č. 1

Samú odpoveď som našla. Môžete použiť nasledovné

<composite:interface>
<composite:attribute name="value" required="true"/>
<composite:editableValueHolder name="input_component">
</composite:interface>

<composite:implementation>
[...]
<h:selectManyCheckbox id="input_component" value="#{cc.attrs.value}">
<composite:insertChildren/>
</h:selectManyCheckbox>
[...]
</composite:implementation>

Dôležitou súčasťou je editableValueHolder tag. Zo stránky, ktorá používa kompozitnú súčasť, môžete teraz použiť

<o:converter for="input_component" converterId="id_of_converter" />

Toto je riešenie, ktoré pre mňa pracuje. Dúfam, že to pomôže ostatným, ktorí majú rovnaký problém.