2013-06-24 20 views
6

Vấn đề: Hành động của bộ điều khiển có thẻ kết xuất mà không truyền vào mô hình. Có một hành động bắt đầu với từ 'get'.Sử dụng 'get' trong một hành động cho bộ điều khiển Grails làm cho hành động thực thi ngay cả khi không được gọi là

grails-app/views/trang web/home.gsp:

homepage 

SiteController.groovy:

class SiteController { 

    def index() { 
     render (view: "home") 
    } 

    def getTest() { 
     render "getTest" 
    } 

} 

Các trang web được truy cập tại localhost: 8080/trang web để thực hiện thao tác chỉ số SiteController.

sản lượng dự kiến: trang chủ đầu ra thực tế: getTest trang chủ

Nếu render hành động của chỉ số được thay đổi như sau:

render(view: "home", model: [:]) 

Sản lượng dự kiến ​​được sản xuất.

Nếu một ký tự được thêm vào trước khi từ đó nhận được trong tên hành động, đầu ra mong đợi được tạo ra.

Điều thú vị đủ, getTest() là màu được mã hóa bằng màu tím trong IDEA. Cũng nên lưu ý rằng nếu bạn có nhiều phương thức với từ nhận được ngay từ đầu, chúng được TẤT CẢ thực thi.

Điều này không xảy ra trong Grails 1.3.6. Điều này có thể tái sản xuất trong một dự án Grails 2.2.2 hoàn toàn mới và có vẻ như là một lỗi đối với tôi. Tại sao chuyện này đang xảy ra?

Trả lời

8

GRAILS-9310 cho thấy rằng đây là giới hạn đã biết sẽ không bị thay đổi, giải pháp thay thế không được đặt tên cho hành động của bạn get*. Nguyên nhân sâu xa là

Nếu không có mô hình rõ ràng được trả về thuộc tính của bộ điều khiển sẽ được sử dụng làm mô hình (Grails docs)

Khi bạn xác định một phương pháp getTest() này có nghĩa là bộ điều khiển có một tài sản test, và khi bạn hiển thị chế độ xem "nhà" mà không có mô hình rõ ràng, các thuộc tính của trình điều khiển sẽ được liệt kê để tạo thành bản đồ mô hình. Phương pháp getTest() sẽ được gọi là một phần của quá trình liệt kê này.

Nếu bạn thực sự cần getTest xuất hiện trong URL sau đó bạn sẽ phải đặt tên cho một cái gì đó hành động thực tế khác và sau đó xác định một ánh xạ URL tùy chỉnh để chỉ đạo việc /controller/getTest URI để hành động đổi tên.

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