3

我有以下 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)
    }
}

从控制器中,我想获取图像属性的默认值(在本例中为“default.jpg”)。像这样的东西:

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

getProductPicturePath 返回一个图像路径,但如果没有提交图像,控制器应将空值替换为默认值。虽然我当然可以写这样的东西:

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

它当然不是很干燥,我更愿意将默认值保留在一个地方。我怎样才能做到这一点?

4

2 回答 2

5

显而易见的解决方案是将其声明为常量,然后引用它。

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

更好getProductPicturePath()的是,返回默认值。

于 2009-05-27T06:16:42.773 回答
0

如果没有image钥匙params

def productInstance = new Product(params)

将跳过此属性并保留域类中定义的默认值。因此,假设您的参数不包含image键,最简单的方法是完全跳过image那些没有图像的产品的属性分配:

def imagePath = getProductPicturePath()
if(imagePath) {
    productInstance.image = imagePath
}
于 2009-05-27T11:41:37.890 回答