2012-01-29 11 views
6

जहां तक ​​मुझे पता है, Google क्लोजर टेम्पलेट जावा ऑब्जेक्ट को टेम्पलेट में पास करने की अनुमति नहीं देता है (FreeMarker की तुलना में)। इसलिए मैं वास्तव में की तरह कुछ भी नहीं कर सकते हैं:जावा ऑब्जेक्ट को क्लोजर टेम्पलेट में पास करना?

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

मैं अगर मैं ऐसा करना चाहते हैं सोच रहा हूँ मैं शायद एक मानचित्र में कोर्स वस्तु चालू करने के लिए प्रतिबिंब का उपयोग करता है एक कस्टम समारोह लिखने के लिए है? मैं जावा प्रतिबिंब के साथ अनुभव नहीं कर रहा हूँ। क्या ऐसा कोई कार्य उपलब्ध है?

उत्तर

7

प्लोव में, मैंने एक उपयोगिता, SoyDataUtil.java बनाया, जो JsonElement लेता है और इसे SoyData में परिवर्तित करता है। माना जाता है कि, यदि आप पहले से ही Gson का उपयोग कर रहे हैं, तो आप केवल यह उपयोगी पा सकते हैं, लेकिन इस दृष्टिकोण के बारे में अच्छी बात यह है कि जीसन आपके लिए गेटर/सेटर प्रतिबिंब का ख्याल रखने की संभावना है। उदाहरण के लिए, मेरा मानना ​​है कि आप ऐसा करने में सक्षम होना चाहिए:

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

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

चाल प्रतिबिंब एक JsonElement में courses बारी करने के लिए क्या करना Gson लाभ है। सुनिश्चित नहीं है कि आप इन निर्भरताओं को जोड़ने के इच्छुक हैं (हालांकि प्लोवर का कोड काफी छोटा है - आप इसे सीधे कॉपी कर सकते हैं), लेकिन यह सबसे अधिक सुविधाजनक समाधान हो सकता है।

+0

initilaizing params.put कथन ठीक है, अगला, मैं इस मान (सोयाडाटा) को टेम्पलेट्स में कैसे पास कर सकता हूं। – gokul