Как получить доступ к свойствам домена с контроллера в Grails? - PullRequest
3 голосов
/ 27 мая 2009

У меня есть следующий класс домена 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"

Это, конечно, не очень СУХОЙ, и я бы предпочел хранить это значение по умолчанию в одном месте. Как мне этого добиться?

Ответы [ 2 ]

5 голосов
/ 27 мая 2009

Очевидное решение состоит в том, чтобы объявить его как константу и затем обратиться к нему.

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 голосов
/ 27 мая 2009

Если нет image, введите params

def productInstance = new Product(params)

пропустит это свойство и оставит значение по умолчанию, определенное в классе домена. Итак, если предположить, что ваши параметры не содержат ключ image, самый простой способ - вообще пропустить присвоение свойства image для продуктов, у которых нет изображения:

def imagePath = getProductPicturePath()
if(imagePath) {
    productInstance.image = imagePath
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...