Как контроллеры Play вводят переменные с правильным именем в шаблоны? - PullRequest
11 голосов
/ 27 октября 2010

В Play начинающих документах они показывают этот контроллер:

public static void index() {
  Post frontPost = Post.find("order by postedAt desc").first();
  List<Post> olderPosts = Post.find("order by postedAt desc").from(1).fetch(10);
  render(frontPost, olderPosts);
}

Затем в шаблоне frontPost и oldPosts используются без какого-либо специального отображения!

<a href="#">${frontPost.title}</a>

Как Play сохраняет эти имена?

1 Ответ

15 голосов
/ 27 октября 2010

Сделано путем внедрения кода.

При компиляции некоторые классы улучшаются (с внедрением кода, Javassist ), чтобы добавить некоторую информацию, например имена переменных.

В методе рендеринга эта операция выполняется классом "play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...