<div dir="ltr"><div><div><div><div><div><div><div><div>Hello,<br><br></div>alapvetően három lehetőséget látok. A kódban ezek némileg keverednek:)<br><br></div>1. A komponensben közvetlenül hivatkozod egy managed beaned valamely mezőjét a szokott módon: disabled="#{myBean.disabled}"<br><br></div>2. A komponensben definiálsz egy aktiv attribútumot. Az interfészen belül, ugyanúgy, mint ahogy a value-t definiáltad, majd a felhasználás helyén is megadod (ha már required), ahogy tetted is. Így nem kötöd hozzá egy konkrét beanhez a komponenst, hanem a komponens felhasználója dönthet a felhasználás helyén arról, mit ad át.<br><a href="http://www.mkyong.com/jsf2/composite-components-in-jsf-2-0/">http://www.mkyong.com/jsf2/composite-components-in-jsf-2-0/</a><br><br></div>3. A komponenst hozzákötöd egy backing componenthez. Nem backing bean (azaz managed bean), hanem backing component.<br><a href="http://balusc.blogspot.hu/2013/01/composite-component-with-multiple-input.html">http://balusc.blogspot.hu/2013/01/composite-component-with-multiple-input.html</a><br><br></div>Azért írtam, hogy keverednek a lehetőségek, mert az interfésznél van egy ilyened: componentType="hu.laja.XXXComponent". Ez pontosan a harmadik megoldás egyik kulcspontja. Az XXXComponent ilyenkor egy backing component kell legyen, ami többek között azt jelenti, hogy "This must be an instance of <code><a href="http://docs.oracle.com/javaee/6/api/javax/faces/component/UIComponent.html">UIComponent</a></code> and implement at least the <code><a href="http://docs.oracle.com/javaee/6/api/javax/faces/component/NamingContainer.html">NamingContainer</a></code> interface". Ilyenkor a backing component mezőit nem cc.attrs.mezőnév, hanem cc.mezőnév formában lehet elérni, és ezek a mezők nem Stringek pl., hanem UI komponens típusúak, pl. UIInput. Az 1. és 2. megoldásoknál nincs szükség a componentType megadására.<br></div><br></div>Üdv<br></div>Csaba<br></div><div class="gmail_extra"><br><div class="gmail_quote">2015. augusztus 10. 16:21 Freemail írta, <span dir="ltr"><<a href="mailto:laja@freemail.hu" target="_blank">laja@freemail.hu</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hali!<br>
<br>
JSF-ben csinálok egy saját compisite components-et, legyen a neve monjuk XXX. Van hozzá egy java osztály is, ami legyen XXXComponent.java. Ebben vagy egy változó, mondjuk legyen 'aktiv'. Van hozzá getter meg setter ahogy kell. A kérdésem az, hogy hogyan tudom a kompons leíró xhtml-ben definiálni mint attribútum ezt a változót?<br>
<br>
XXX.xhtml:<br>
<html ....><br>
<composite:interface componentType="hu.laja.XXXComponent"><br>
<composite:attribute name="value" required="true"/><br>
<!-- Itt hogy kell definiálni az XXXComponent.java 'aktiv' változóját? --><br>
</composite:interface><br>
<br>
<composite:implementation><br>
....<br>
<p:selectOneMenu<br>
disabled="#{not cc.attrs.aktiv"><br>
....<br>
</composite:implementation><br>
</html><br>
<br>
Használva:<br>
....<br>
<laja:XXX value="egy" aktiv="true"/><br>
<br>
<br>
Ez így működik rendesen, de a NetBeans meg más kód ellenőrzők hibásnak titulálják a kódot, mert hogy nincs olyan attribútuma hogy 'aktiv'. Persze hogy nem látja, mert nincs definiálva...<br>
<br>
A kérdésem, hogyan kell definiálni a java-ban lévő változókat mint attribútumokat a komponensben?<br>
(Ha simán úgy definiálom mint a többit, akkor mindenféle hibák jönnek, meg nem renderelődik rendesen a komponens :( )<br>
<br>
Köszi!<br>
<br>
Laja<br>
<br>
_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
</blockquote></div><br></div>