Domanda In che modo i controller Play immettono le variabili con il nome corretto nei modelli?


Nel Riproduci i documenti introduttivi, mostrano questo controller:

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);
}

Quindi, nel modello vengono utilizzati frontPost e olderPosts senza alcuna mappatura speciale!

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

In che modo Play preserva questi nomi?


11
2017-10-27 19:25


origine


risposte:


È fatto per iniezione di codice.

Alla compilazione, alcune classi sono migliorate (con l'iniezione di codice, da Javassist), per aggiungere alcune informazioni, come i nomi delle variabili.

Nel metodo di rendering, questa operazione viene eseguita dalla classe "play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer".


15
2017-10-27 19:48