2010-10-27 5 views
11

En el Play getting started docs, que muestran este controlador:¿Cómo los controladores Play insertan variables con el nombre propio en las plantillas?

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

A continuación, en la plantilla de la frontPost y olderPosts se utilizan sin ninguna asignación especial!

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

¿Cómo se preservan estos nombres?

Respuesta

15

Se realiza por inyección de código.

En compilación, algunas clases se han mejorado (con inyección de código, por Javassist), para agregar algunas informaciones, como nombres de variables.

En el método de renderizado, esta operación se realiza mediante la clase "play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer".

+0

Esta característica se rompe cuando pasa objetos que no tienen nombres para representar (ejemplo: render (Posts.findById (id))). El mensaje de error resultante es una simple NullPointerException en la plantilla. ¿Sabes si hay una buena razón por la cual el mensaje de error no puede ser más útil en este caso? – pawstrong

Cuestiones relacionadas