如何从Grails中的控制器访问域属性?

时间:2009-05-27 05:44:25

标签: java grails groovy controller dns

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

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

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

getProductPicturePath返回图像路径,但是如果没有提交图像,控制器应使用默认值替换null值。虽然我当然可以这样写:

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

如果image

中没有params
def productInstance = new Product(params)

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

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