2009-05-27 4 views
3

ich folgende Grails Domain-Klasse haben:Zugriff auf Domäneneigenschaften von einem Controller in 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) 
    } 
} 

Von einem Controller, möchte ich den Standardwert für die Bildeigenschaft erhalten (in diesem Fall „default.jpg“). Etwas wie folgt aus:

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

getProductPicturePath ein Bild Weg zurück, aber im Falle wurde kein Bild eingereicht, der Controller wird den Nullwert mit dem Standard ersetzen. Während ich sicherlich so etwas schreiben könnte:

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

Es ist sicherlich nicht sehr trocken, und ich würde diesen Standardwert in einem Ort zu halten bevorzugen. Wie kann ich das erreichen?

Antwort

5

Die naheliegende Lösung besteht darin, sie als Konstante zu deklarieren und sich darauf zu beziehen.

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 

noch besser machen getProductPicturePath() den Standardwert zurück.

+0

Danke, das ist, was ich gesucht habe für genau. – Cesar

0

Wenn es keine image Schlüssel in params

def productInstance = new Product(params) 

diese Eigenschaft überspringen und den Standardwert in der Domäne-Klasse definiert verlassen. Also, vorausgesetzt, dass Ihr params keine image Schlüssel enthält, ist die einfachste Art und Weise der Zuordnung der image Eigenschaft überhaupt für diese Erzeugnisse überspringen würde, die kein Bild haben:

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

Ich war mir dessen nicht bewusst. Meine Parameter enthalten einen Bildschlüssel, der aus einem Upload-Formular mit anderen Feldern stammt, und der Benutzer kann eine Bilddatei hochladen oder nicht. – Cesar

Verwandte Themen