2010-09-03 65 views
5

Làm thế nào để tôi tìm thấy tất cả các bộ điều khiển đang chạy trong một ứng dụng?Tìm tất cả các bộ điều khiển trong ứng dụng

Tôi đang cố gắng tạo menu bằng YUI nơi chỉ có các trình điều khiển đã đăng ký mới có menu được hiển thị. Một lớp điều khiển sẽ tạo ra một danh sách tĩnh với các thuộc tính khác nhau chi tiết tên, hành động, vv (giống như plugin grails-nav).

Tôi muốn tạo một thẻ taglib có thể tìm tất cả các bộ điều khiển, xác định danh sách nào có danh sách tĩnh này sau đó xem trong mỗi danh sách và xây dựng một menu.

Tôi nghĩ rằng tôi có thể sử dụng ControllerGrailsClass.metaClass.hasProperty để xác định liệu một bộ điều khiển đã cho có thuộc tính tĩnh hay không - nhưng làm cách nào để tìm tất cả các lớp Bộ điều khiển để thẩm vấn?

Cảm ơn trước

Trả lời

9

Bạn có thể nhận danh sách từ đối tượng GrailsApplication. Ví dụ:

class TestController { 

    def grailsApplication // gets injected automatically 

    def test = { 
     grailsApplication.controllerClasses.each { controllerArtefact -> 
      def controllerClass = controllerArtefact.getClazz() 
      println "$controllerArtefact, $controllerClass" 
     } 
    } 
} 

Nếu bạn đang không ở trong một bộ điều khiển, bạn có thể có được một tổ chức của các đối tượng grails ứng dụng như vậy:

import org.codehaus.groovy.grails.commons.ApplicationHolder 

def grailsApplication = ApplicationHolder.application 
+0

Cảm ơn ataylor trả lời nhắc nhở của bạn. Tôi chỉ nhìn thấy điều này trong cuốn sách hướng dẫn dứt khoát (thông qua tìm kiếm google), nó tiêm lớp grailsApplication và thêm một số lựa chọn của getters động có được * Lớp học, vv .. Câu hỏi khác đáng hỏi là làm thế nào để bạn tìm thấy thông tin này? Ví dụ tôi đã tìm kiếm API grails và lớp không đề cập đến các phương thức động này. Tôi đã tìm kiếm google khác nhau và một lần nữa không tìm thấy bất cứ điều gì. Các tham chiếu grails không thực hiện bất kỳ tài liệu tham khảo này - tôi chắc chắn havent tìm thấy. – Primus

+0

cảm ơn ataylor một lần nữa, một số gợi ý về một nguồn tốt cho thông tin này cũng sẽ được đánh giá cao. Tôi có hướng dẫn dứt khoát cho grails nhưng không bao giờ có thể nhớ thấy loại thông tin này. – Primus

+0

Các phương thức getControllerClasses, getDomainClasses, vv được giải quyết động trong DefaultGrailsApplication.invokeMethod() và getProperty() để hỗ trợ các lớp tạo tác được cung cấp bởi plugin. Ví dụ, plugin Quartz bổ sung thêm một tạo phẩm Job, vì vậy getJobClasses sẽ trả về tất cả các tạo phẩm Job nếu plugin Quartz được cài đặt. –

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