【问题标题】:How do Play controllers inject variables with the proper name into templates?Play 控制器如何将具有正确名称的变量注入到模板中?
【发布时间】:2010-10-27 19:25:45
【问题描述】:

Play getting started docs 中,他们显示了这个控制器:

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 如何保留这些名称?

【问题讨论】:

    标签: playframework


    【解决方案1】:

    它是通过代码注入制作的。

    在编译时,一些类被增强(通过代码注入,由Javassist),以添加一些信息,例如变量名。

    在render方法中,这个操作是由“play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer”类完成的。

    【讨论】:

    • 当您传递没有要呈现的名称的对象时,此功能会中断(例如:render(Posts.findById(id)))。生成的错误消息是模板中的简单 NullPointerException。您是否知道在这种情况下错误消息不能提供更多帮助的充分理由?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多