Насколько я знаю, Google Closure Template не позволяет передавать Java-объект в шаблон (по сравнению с FreeMarker). Поэтому я не могу сделать что-то вроде:
// Java file
class Course {
...
public function getName() {
return name;
}
}
// Main function
public static void main(String args[]) {
// Get all courses
List courses = Courses.getAllCourses();
Map params = new HashMap();
params.put("courses", courses);
String out = tofu.newRenderer("template.listCourses").setData(params);
}
// Soy file
/**
* @param courses List of courses
*/
{template .listCourses}
Courses List!
{foreach $course in $courses}
New Course: {$course.name}
{/foreach}
{/template}
Я думаю, что если я хочу сделать это, мне, вероятно, придется написать пользовательскую функцию, которая использует Reflection, чтобы превратить объект Course в Map? У меня нет опыта работы с Java Reflection. Есть ли такая функция?