2009-05-27 5 views
3

Je le domaine Grails suivant classe:Comment accéder aux propriétés du domaine à partir d'un contrôleur dans Grails?

class Product { 
    String name 
    Float basePrice 
    Category category 
    String image = "default.jpg" 

    static constraints = { 
     name(size:3..25, blank:false) 
     basePrice(scale:2, nullable:false) 
     category(inList:Category.list(), nullable:false) 
     image(blank:false) 
    } 
} 

d'un contrôleur, je veux obtenir la valeur par défaut de la propriété d'image (dans ce cas « default.jpg »). Quelque chose comme ceci:

def productInstance = new Product(params) 
productInstance.image = getProductPicturePath() ?: Product().image 

getProductPicturePath retourne un chemin d'image, mais si aucune image a été soumis, le contrôleur doit remplacer la valeur nulle par défaut. Alors que je pourrais certainement écrire quelque chose comme ceci:

productInstance.image = getProductPicturePath() ?: "default.jpg" 

Il est certainement pas très sec, et je préfère garder cette valeur par défaut en un seul endroit. Comment puis-je atteindre cet objectif?

Répondre

5

La solution évidente est de le déclarer comme une constante, puis de s'y référer.

class Product { 
    static DEFAULT_IMAGE = "default.jpg" 
    String name 
    Float basePrice 
    Category category 
    String image = DEFAULT_IMAGE 

    static constraints = { 
     name(size:3..25, blank:false) 
     basePrice(scale:2, nullable:false) 
     category(inList:Category.list(), nullable:false) 
     image(blank:false) 
    } 
} 

productInstance.image = getProductPicturePath() ?: Product.DEFAULT_IMAGE 

Mieux encore, faire getProductPicturePath() retourner la valeur par défaut.

+0

Merci, c'est ce que je recherchais pour exactement. – Cesar

0

S'il n'y a pas de clé image dans params

def productInstance = new Product(params) 

sautera cette propriété et laissez la valeur par défaut définie dans la classe de domaine. Donc, en supposant que votre params ne contient pas une clé image, la façon la plus simple serait de sauter la cession du bien image à tous les produits qui ont pas d'image:

def imagePath = getProductPicturePath() 
if(imagePath) { 
    productInstance.image = imagePath 
} 
+0

Je n'étais pas au courant de cela. Mes paramètres contiennent une clé d'image, elle provient d'un formulaire de téléchargement avec d'autres champs et l'utilisateur peut ou non télécharger un fichier image. – Cesar

Questions connexes