2013-08-14 17 views
9

sto cercando di rendere il mio modello da taglib:Grails: Rendering modello da taglib come HTML

out << g.render(template: "/menu/sidebar") 

Questo è quello che sembra il mio modello barra laterale come:

<ul> 
    <li>TEST1</li> 
    <li>TEST2</li> 
</ul> 

Quando ho ispezionare la mia pagina in del browser, tutto il codice del modello appare in apostrofi come questo ...

"<ul> 
    <li>TEST1</li> 
    <li>TEST2</li> 
</ul>" 

... e stampa il mio codice HTML proprio come un pla nel testo. Qualche idea su come far riconoscere il contenuto come un codice html appropriato?

Edit: Taglib Codice:

class MenuTagLib { 
    static defaultEncodeAs = 'html' 
    def renderIfExists = { attrs,body-> 
     GrailsConventionGroovyPageLocator groovyPageLocator 
     println attrs.template 
     if(groovyPageLocator.findTemplateByPath(attrs.template)) 
     { 
      g.render(template:attrs.template) 
     } 
     else{ 


      out << g.render(template: "/menu/sidebar") 
     } 
    } 
} 

Il modo di chiamarla:

<g:renderIfExists template="/${params.controller}/sidebar" plugin="untitled1" /> 
+0

per quanto ne so, 'fuori << render (template: "/ menu/sidebar") dovresti farlo ... –

+0

Rende lo stesso – Saraph

+0

Puoi pubblicare il tuo codice taglib e il modo in cui lo chiami? –

risposta

22

Se dovessi tirare a indovinare, sarebbe che avete questo nella tua classe:

static defaultEncodeAs = 'html'

Si dovrebbe rimuovere quella linea e riprovare. Questo dice che dovrebbe sfuggire ai caratteri html.

8

Le librerie di tag predefinite per codificare il contenuto del tag come HTML a partire da Grails 2.3. Questo può essere disabilitato con l'aggiunta di

static defaultEncodeAs = "raw" 

Questo vi permetterà il tag di uscita lib essere html cruda, invece di come una stringa

1

Prova con:

static defaultEncodeAs = [taglib:'text'] 
+2

Per favore, se vuoi ottenere più upvotes devi spiegare la tua risposta. La tua risposta potrebbe risolvere il problema ma non dare informazioni su ciò che era sbagliato e whay era sbagliato. –