grails получают доступ к объектам домена динамически

#grails

#grails

Вопрос:

Я работаю в grails и получаю имя своего доменного класса из gsp для доступа к экземпляру объекта (с определенным идентификатором) этого доменного класса. Я пытаюсь использовать следующий код. Правильно ли это?

    String id = params['id']
   String className = params['className']

   def instance = className.get(id);
  

Есть ли какой-либо другой способ для этого?

Ответ №1:

прежде всего, вы должны внедрить компонент grailsApplication в свой контроллер.

 def grailsApplication 
  

после этого вы можете использовать метод getClassForName для извлечения нужного класса по имени.

 grailsApplication.getClassForName(className).
  

вы должны использовать полное имя класса, например my.test.MyClass

Комментарии:

1. нет необходимости в def grailsApplication контроллерах — переменная уже добавлена в метакласс

Ответ №2:

 def id = params.id
def className = params.'className'

def domainClazz = grailsApplication.classLoader.loadClass(className)
def instance = id ? domainClazz.get(id as Long) : null
  

Вы можете:

 grailsApplication.classLoader.loadClass("Book") 
  

или

 grailsApplication.classLoader.loadClass("com.yourapp.Book")
  

Комментарии:

1. обратите внимание, что grailsApplication.classLoader.loadClass("Book") это не работает. Таким образом, более безопасный способ — найти класс через артефакты grails.