如何从 Grails 中的控制器访问域属性?
Posted
技术标签:
【中文标题】如何从 Grails 中的控制器访问域属性?【英文标题】:How to access domain properties from a controller in 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"
它当然不是很干燥,我更愿意将默认值保留在一个地方。我怎样才能做到这一点?
【问题讨论】:
【参考方案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
【讨论】:
我没有意识到这一点。我的参数包含一个图像键,它来自带有其他字段的上传表单,用户可能会也可能不会上传图像文件。以上是关于如何从 Grails 中的控制器访问域属性?的主要内容,如果未能解决你的问题,请参考以下文章