2009-05-27 71 views
3

我有以下的Grails领域类:如何从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" 

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

回答

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()返回默认值。

+0

谢谢,这就是我一直在寻找确切地说。 – Cesar 2009-05-27 14:22:03

0

如果没有imageparams

def productInstance = new Product(params) 

将跳过此属性,并留在域类中定义的默认值。因此,假设您的PARAMS不包含image关键,最简单的方法是将跳过在所有的那些没有影像产品image财产的分配:

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

我没有意识到这一点。我的参数包含一个图像键,它来自一个带有其他字段的上传表单,用户可能会或可能不会上传图像文件。 – Cesar 2009-05-27 14:21:43

相关问题