В Grails, как мне получить список всех значений дискриминатора для всех подклассов базового типа?

Допустим, у меня есть следующие классы:

class Apple extends Fruit { ... }
class Banana extends Fruit { ... }
class Grape extends Fruit { ... }
class Kiwi extends Fruit { ... }

И так далее. Теперь мне нужно отобразить выпадающий список, содержащий список всех значений дискриминатора всех подклассов, которые расширяются Fruitтак, например:

<select name="fruitType">
    <option value="Apple">Apple</option>
    <option value="Apple">Banana</option>
    <option value="Apple">Grape</option>
    <option value="Apple">Kiwi</option>
</select>

Это достаточно просто для жесткого кодирования 4 из них, но в моем реальном домене есть вероятность, что этот список может стать довольно длинным. Есть ли способ получить список всех значений дискриминатора для всех подклассов, которые реализуют базовый тип? Примерно так, например:

Fruit.class.getAllDiscriminatorValues()

1 ответ

Вы могли бы сделать это:

def getAllFruitSubclasses() {

   def fruit = []

   grailsApplication.domainClasses.each { 
      if (it.clazz.superclass == 'com.whatever.Fruit') {
         fruit << it.clazz.simpleName
      }
   }
   return fruit
}
Другие вопросы по тегам