2012-01-24 13 views
19

Czy można "wyrenderować" szablon w ciągu znaków? Chciałbym użyć szablonu i wypełnić go pewnymi wartościami, które następnie muszę zapisać na dysku lokalnym.Czy renderujesz szablon w ciągu znaków?

Metoda renderowania zawsze wysyła szablon do klienta. Chcę coś podobnego do uruchomienia szablonu, ale Zapisz dane wyjściowe z szablonu do lokalnej zmiennej ciągów, które można przechowywać w lokalnym systemie plików.

Odpowiedz

21

To prostsze niż myślisz:

def myTemplateString = g.render(template: "test", model: [foo: bar]) 
+0

Dzięki! Prosty i elegancki. – Henrik

+0

To nic nie robi, dlaczego jest to zaakceptowana odpowiedź? Jaka jest zmienna "g"? – Michael

+0

Wymaga również wstrzyknięcia elementu PageRenderer. – Michael

13

Jeśli używasz Grails 2.x, można użyć klasy PageRenderer. Wypróbuj coś takiego:

 grails.gsp.PageRenderer groovyPageRenderer 

    void methodName() { 
     def contents = groovyPageRenderer.render(template:"yourTemplate", model:yourModel) 
     //you can use contents as a string now 
    } 

Będzie to działać również poza zakresem żądania internetowego, np. W zaplanowanym zleceniu lub serwisie internetowym.

+0

Dziękuję również. – Henrik

+2

To nie działa w Tomcat 6 dla przynajmniej Grails wersji 2.1.1 i poniżej. –

+0

@JohnGiotta Wierzę, że musisz działać w kontenerze obsługującym Servlet 3.0, aby to działało. –