2012-01-29 9 views
6

Per quanto ne so, il modello di chiusura di Google non consente il passaggio dell'oggetto Java nel modello (rispetto a FreeMarker). Quindi non posso davvero fare qualcosa di simile:Passaggio dell'oggetto Java nel modello di chiusura?

// Java file 
class Course { 
    ... 
    public function getName() { 
    return name; 
    } 
} 

// Main function 
public static void main(String args[]) { 
    // Get all courses 
    List<Course> courses = Courses.getAllCourses(); 
    Map<String, Object> params = new HashMap<String, Object>(); 
    params.put("courses", courses); 

    String out = tofu.newRenderer("template.listCourses").setData(params); 
} 

// Soy file 
/** 
* @param courses List of courses 
*/ 
{template .listCourses} 
    Courses List! <br/> 

    {foreach $course in $courses} 
     New Course: {$course.name} 
    {/foreach} 
{/template} 

Sto pensando se voglio fare questo probabilmente devo scrivere una funzione personalizzata che utilizza la riflessione per trasformare oggetto del corso in una mappa? Non ho esperienza con Java Reflection. Esiste una funzione simile?

risposta

7

In plovr, ho creato un programma di utilità, SoyDataUtil.java, che prende uno JsonElement e lo converte in un SoyData. Certo, potresti trovarlo utile solo se stai già utilizzando Gson, ma la cosa bella di questo approccio è che Gson probabilmente si prenderà cura della riflessione getter/setter per te. Per esempio, credo che si dovrebbe essere in grado di fare:

JsonElement json = (new Gson()).toJsonTree(courses); 
SoyData soyData = SoyDataUtil.jsonToSoyData(json); 

Map<String, Object> params = new HashMap<String, Object>(); 
params.put("courses", soyData); 

Il trucco sta sfruttando GSON da fare per la riflessione di trasformare in un coursesJsonElement. Non sei sicuro di voler aggiungere queste dipendenze (anche se il codice di plovr è piuttosto piccolo - puoi semplicemente copiarlo direttamente), ma questa potrebbe essere la soluzione più opportuna.

+0

inizializzare l'istruzione params.put va bene, successivamente, come posso passare questo valore (soydata) ai modelli. – gokul

Problemi correlati