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)
    }
}

コントローラから、imageプロパティのデフォルト値(この場合は「default.jpg」)を取得したいと思います。このようなもの:

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

getProductPicturePathは画像パスを返しますが、画像が送信されなかった場合、コントローラーはnull値をデフォルトに置き換えます。私は確かにこのようなものを書くことができましたが:

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

確かにそれほど乾燥しているわけではないので、そのデフォルト値を1か所に残したいと思います。どうすればこれを達成できますか?

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)

このプロパティをスキップし、ドメイン クラスで定義されたデフォルト値のままにします。したがって、params にキーが含まれていないと仮定すると、最も簡単な方法は、画像のない製品imageのプロパティの割り当てをまったくスキップすることです。image

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