2010-09-03 23 views
5

Uygulamada çalışan tüm denetleyicileri nasıl bulurum?Uygulamadaki tüm denetleyicileri bulma

YUI kullanarak bir menü oluşturmaya çalışıyorum, burada yalnızca kayıtlı denetleyicilerin bir menüsü görüntülenecektir. Bir denetleyici sınıfı, ad, eylem, vb. Ayrıntılarını içeren çeşitli özelliklere sahip bir statik liste oluşturacaktır (grails-nav eklentisi gibi).

Tüm denetleyicileri bulabilen, hangisinin bu statik listeye sahip olduğunu belirledikten sonra her listeye bakıp bir menü oluşturduğunu belirten bir taglib oluşturmak istiyorum.

Belirli bir denetleyicinin statik özelliğe sahip olup olmadığını belirlemek için ControllerGrailsClass.metaClass.hasProperty'yi kullanabileceğimi düşünüyorum; ancak sorgu için tüm Denetleyici sınıflarını nasıl bulabilirim? Sen GrailsApplication nesneden bir listesini alabilirsiniz peşin

cevap

9

yılında

teşekkürler. Örnek: Bir denetleyici değilsen

class TestController { 

    def grailsApplication // gets injected automatically 

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

, bunu gibi grails uygulama nesnesinin bir elde edebilirler: Hemen cevap için ataylor

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

def grailsApplication = ApplicationHolder.application 
+0

teşekkürler. Bunu sadece kesin kılavuz kitabında gördüm (google arama yoluyla), grailsApplication sınıfını enjekte eder ve dinamik getçilerden bir seçim alır * Sınıflar alır * Sormaya değer diğer soru bu bilgiyi nasıl buluyorsunuz? Örneğin, grails API'sini aradım ve sınıf bu dinamik yöntemlerden hiç bahsetmedi. Çeşitli Google aramaları yaptım ve bir şey bulamadım. Mezar referansı bunlara herhangi bir gönderme yapmaz - ben kesinlikle bulunamamış. – Primus

+0

tekrar teşekkürler ataylor, bu bilgi için iyi bir kaynak bazı işaretçiler de takdir edilecektir. Mezarlara kesin bir rehberim var ama bu tür bilgileri görmeyi hiç hatırlayamıyorum. – Primus

+0

getControllerClasses, getDomainClasses, vb. Yöntemleri, eklenti tarafından sağlanan artifact sınıflarını desteklemek için DefaultGrailsApplication.invokeMethod() ve getProperty() öğelerinde dinamik olarak çözümlenmiştir. Örneğin, Quartz eklentisi bir İş artefaktı ekler, bu yüzden getJobClasses Quartz eklentisi takılıysa tüm İş eserlerini iade edecektir. –

İlgili konular