2013-05-30 29 views
6

Devo eseguire la migrazione di un componente composito a un componente personalizzato. Questo esempio è piuttosto semplificato, ma dimostra il problema: i child del componente (my:test) devono essere sottoposti a rendering in un altro componente. Il composito my:testC, come un esempio che io non voglio usare, sarebbe simile a questaMigrazione del componente composito al componente personalizzato

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

Ovviamente (almeno spero di essere corretto con questa ipotesi) Non posso semplicemente rendere il p:panel in encodeBegin .

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

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

voglio usare my:test in un modo simile a questo:

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

L'uscita dovrebbe essere lo stesso che utilizzare my:testC: del testo reso in un pannello primefaces. Come posso codificare l'uso di p:panel nella mia classe Java?

+0

Non capisco il problema/domanda concreta (in realtà, non c'è una domanda concreta da nessuna parte). Stai chiedendo concretamente come codificare la stessa uscita di '' nel tuo componente personalizzato? Oppure stai chiedendo concretamente come riutilizzare il codificatore predefinito (renderer) di '' per quella parte? I bambini non rappresentano affatto il problema dato che 'encodeChildren()' fa tutto automaticamente, come mai l'ultima frase del primo paragrafo sembra indicare il contrario, il che è fonte di confusione. – BalusC

+0

@BalusC Grazie per aver guardato in questo numero. Ho aggiornato la domanda, speriamo che sia meglio capirlo ora. Per rispondere alla tua domanda: sto provando a codificare lo stesso output di 'p: panel'. – Thor

risposta

0

L'hai osservato correttamente. Non puoi semplicemente rendere "p: panel" o qualsiasi altro markup jsf in un componente personalizzato.

Cosa si può fare comunque:

  • un'istanza sottocomponenti utilizzando l'istanza di applicazione, aggiungerlo come un aspetto o un bambino per il componente personalizzato e quindi chiamare la codifica su di essa nel proprio renderer.

  • Direttamente rendering HTML

  • Utilizzare l'API facelet che dovrebbe essere disponibile nella corrente JSF (non ho mai effettivamente lavorato in questo)

  • Usa qualsiasi altra elaborazione modello come velocità o freemarker rendere HTML.

Problemi correlati