2012-12-06 5 views
2

Disons que j'ai les classes suivantes:Dans Grails, comment obtenir une liste de toutes les valeurs discriminantes pour toutes les sous-classes d'un type de base?

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

Et ainsi de suite et ainsi de suite. Je dois maintenant afficher un menu déroulant qui contient une liste de toutes les valeurs discriminantes de toutes les sous-classes qui se prolongent Fruit, donc par exemple:

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

C'est assez facile à coder en dur pour 4 d'entre eux, mais dans mon domaine réel il y a le potentiel pour que cette liste devienne assez longue. Est-il possible d'obtenir une liste de toutes les valeurs discriminantes pour toutes les sous-classes qui implémentent un type de base? Quelque chose comme ça, par exemple:

Fruit.class.getAllDiscriminatorValues() 
+0

post-scriptum La solution de contournement que nous avons utilisée jusqu'à présent consiste à créer une énumération statique avec tous les types, par ex. 'enum statique publique FruitType {Apple, Banana, Raisin, Kiwi}', mais ce n'est pas vraiment une solution maintenable. –

Répondre

2

Vous pouvez le faire:

def getAllFruitSubclasses() { 

    def fruit = [] 

    grailsApplication.domainClasses.each { 
     if (it.clazz.superclass == 'com.whatever.Fruit') { 
     fruit << it.clazz.simpleName 
     } 
    } 
    return fruit 
} 
Questions connexes