2012-01-29 27 views
6

Bildiğim kadarıyla, Google Kapatma Şablonu, Java nesnesini şablona geçirmeye izin vermiyor (FreeMarker ile karşılaştırıldığında). Yani gerçekten böyle bir şey yapamaz:Java nesnesini kapatma şablonuna geçiriliyor musunuz?

// 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} 

bunu yapmak istiyorsam ben büyük ihtimalle harita haline Kurs nesnesini açmak için yansıma kullanan özel bir işlevi yazmak zorunda düşünüyorum? Java Yansıma ile deneyimim yok. Böyle bir fonksiyon var mı?

cevap

7

plovr'de, JsonElement numaralı telefonu alan ve SoyData içine dönüştüren bir yardımcı program (SoyDataUtil.java) oluşturdum. Kuşkusuz, zaten bu yararlı Gson kullanıyorsanız, ancak bu yaklaşım hakkında güzel bir şey Gson muhtemelen sizin için alıcı/belirleyici yansıması dikkat çekmek olduğunu yararlı bulabilirsiniz. Mesela ben yapmanız gerekir inanıyoruz:

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

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

hüner bir JsonElement içine courses açmak için yansıma yapmak GSON kullanıyor. Bu bağımlılıkları eklemek isteyip istemediğinizden emin değilsiniz (plovr'ın kodu oldukça küçük olsa da, doğrudan kopyalayabilirsiniz), ancak bu en uygun çözüm olabilir.

+0

params.put ifadesini geçersiz kılıyor, sonraki adım, bu değeri (soyadata) şablonlara nasıl aktarabilirim. – gokul

İlgili konular