2013-05-30 29 views
6

Muszę przeprowadzić migrację komponentu kompozytowego do komponentu niestandardowego. Ten przykład jest raczej uproszczony, ale demonstruje problem: elementy potomne mojego komponentu (my:test) muszą być renderowane w innym komponencie. Kompozyt my:testC, jako przykład, który nie chcę użyć, będzie wyglądać takMigracja komponentu kompozytowego do komponentu niestandardowego

<composite:implementation> 
    <p:panel> 
    <composite:insertChildren/> 
    </p:panel> 
</composite:implementation> 

oczywiście (przynajmniej mam nadzieję, że się nie mylę z tym założeniem) Nie mogę po prostu spowodować, że p:panel w encodeBegin .

@FacesComponent("test") 
public class Test extends UIPanel 
{ 
    @Override 
    public void encodeBegin(FacesContext context) throws IOException 
    { 
    // ?? 
    } 

    @Override 
    public void encodeEnd(FacesContext context) throws IOException 
    { 
    // ?? 
    } 
} 

chcę użyć my:test w sposób jak poniżej:

<my:test> 
    <h:outputText value="some Text"/> 
</my:test> 

Wyjście powinno być takie same, jak przy użyciu my:testC: jakiś tekst świadczonych w panelu PrimeFaces. Jak mogę zakodować użycie p:panel w mojej klasie Java?

+0

Nie rozumiem konkretnego problemu/pytania (w rzeczywistości nie ma nigdzie konkretnego pytania). Czy jesteś konkretnie z pytaniem, jak zakodować to samo wyjście z '' w swoim komponencie niestandardowym? A może konkretnie pytasz, jak ponownie użyć domyślnego kodera (renderera) '' dla tej części? Dzieci w ogóle nie stanowią problemu, ponieważ 'encodeChildren()' robi to wszystko automatycznie, podczas gdy ostatnie zdanie pierwszego akapitu wydaje się wskazywać inaczej, co jest mylące. – BalusC

+0

@BalusC Dziękujemy za obejrzenie tego numeru. Zaktualizowałem to pytanie, mam nadzieję, że teraz lepiej to zrozumieć. Aby odpowiedzieć na twoje pytanie: Próbuję zakodować to samo wyjście z 'p: panel'. – Thor

Odpowiedz

0

Zaobserwowałeś to poprawnie. Nie można po prostu wyrenderować "p: panel" lub jakiegokolwiek innego znacznika jsf w składniku niestandardowym.

Co można zrobić, jednakże:

  • Inicjują podskładniki używając instancję aplikacji, dodaj je jako aspekt lub dziecka do niestandardowego komponentu, a następnie zadzwonić zakodować na niej w swoim własnym renderujący.

  • Bezpośrednio renderowania HTML

  • Użyj facelet API, które powinny być dostępne w bieżącym JSF (nigdy nie zostały faktycznie pracował z tym)

  • używać innych przetwarzanie szablon jak prędkość lub freemarker renderowanie HTML.