【问题标题】:How to access domain properties from a controller in Grails?如何从 Grails 中的控制器访问域属性?
【发布时间】:2010-10-29 04:28:47
【问题描述】:

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

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

【问题讨论】:

    标签: java grails groovy controller dns


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这正是我想要的。
    【解决方案2】:

    如果params中没有image

    def productInstance = new Product(params)
    

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

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

    【讨论】:

    • 我没有意识到这一点。我的参数包含一个图像键,它来自带有其他字段的上传表单,用户可能会也可能不会上传图像文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多