2010-10-27 36 views
11

Trong Play getting started docs, họ cho thấy bộ điều khiển này:Làm thế nào để chơi bộ điều khiển tiêm biến với tên thích hợp vào mẫu?

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

Sau đó, trong bản mẫu các frontPost và olderPosts được sử dụng mà không cần bất kỳ bản đồ đặc biệt!

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

Play bảo quản các tên này như thế nào?

Trả lời

15

Nó được thực hiện bằng cách tiêm mã.

Khi biên dịch, một số lớp được tăng cường (với mã tiêm, Javassist), để thêm một số thông tin, chẳng hạn như tên biến.

Trong phương thức hiển thị, thao tác này được thực hiện bởi lớp "play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesNamesTracer".

+0

Tính năng này ngắt khi bạn chuyển đối tượng không có tên để hiển thị (ví dụ: hiển thị (Posts.findById (id))). Thông báo lỗi kết quả là một NullPointerException đơn giản trong khuôn mẫu. Bạn có biết nếu có lý do chính đáng tại sao thông báo lỗi không hữu ích hơn trong trường hợp này? – pawstrong

Các vấn đề liên quan