Grails - 如何访问域 类 中的配置值?
Grails - How to access configuration values in domain classes?
虽然之前针对更旧版本的 grails 已经问过这个或类似的问题,但我想知道从 grails 域 class 中的 application.yml
访问配置值的最佳方法是什么现代圣杯 4.0.3.
那么,假设我们有一个 voucher.groovy
喜欢
class Voucher implements HibernateEntity<Voucher> {
...
Date reservedAt
static transients = ['validUntil']
Date getValidUntil() {
Integer expirationTime = // TODO: fill in the configuration value
DateTime expirationDateTime = new DateTime(this.reservedAt)
.plusDays(expirationTime)
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(999)
return expirationDateTime.toDate()
}
}
和一个名为 voucher.expirationTime
的配置值在我们的 application.yml
like
...
voucher.expirationTime: 10
...
如何在我的 getValidUntil()
方法中访问配置值?
编辑
正如@JeffScottBrown 在他的评论中提到的,您不应该访问您域中的配置值 class。所以我最终得到了他建议的使用自定义 gsp 标签的方法。 (见下面的答案)
如何访问域 类 中的配置值?你不应该!
在我的例子中,我需要将派生值显示为域属性和配置值的组合 reservedAt + expirationTime
。
感谢 Jeff Scott Brown 的评论,我设法为我的目的创建了一个自定义 gsp 标签:
class VoucherTagLib {
static returnObjectForTags = ['validUntil']
static namespace = "voucher"
@Value('${voucher.expirationTime}')
Integer expirationTime
GrailsTagDateHelper grailsTagDateHelper
def validUntil = { attrs, body ->
Date reservedAt = attrs.reservedAt
String style = attrs.style ?: "SHORT"
Locale locale = GrailsWebRequest.lookup().getLocale()
if (locale == null) {
locale = Locale.getDefault()
}
def timeZone = grailsTagDateHelper.getTimeZone()
def dateFormat = grailsTagDateHelper.getDateFormat(style, timeZone, locale)
DateTime expirationDateTime = new DateTime(reservedAt)
.plusDays(expirationTime - 1)
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(999)
return grailsTagDateHelper.format(dateFormat, expirationDateTime.toDate())
}
}
虽然这可能不是您要找的答案,但我希望这能对遇到类似问题的其他人有所帮助!
虽然之前针对更旧版本的 grails 已经问过这个或类似的问题,但我想知道从 grails 域 class 中的 application.yml
访问配置值的最佳方法是什么现代圣杯 4.0.3.
那么,假设我们有一个 voucher.groovy
喜欢
class Voucher implements HibernateEntity<Voucher> {
...
Date reservedAt
static transients = ['validUntil']
Date getValidUntil() {
Integer expirationTime = // TODO: fill in the configuration value
DateTime expirationDateTime = new DateTime(this.reservedAt)
.plusDays(expirationTime)
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(999)
return expirationDateTime.toDate()
}
}
和一个名为 voucher.expirationTime
的配置值在我们的 application.yml
like
...
voucher.expirationTime: 10
...
如何在我的 getValidUntil()
方法中访问配置值?
编辑
正如@JeffScottBrown 在他的评论中提到的,您不应该访问您域中的配置值 class。所以我最终得到了他建议的使用自定义 gsp 标签的方法。 (见下面的答案)
如何访问域 类 中的配置值?你不应该!
在我的例子中,我需要将派生值显示为域属性和配置值的组合 reservedAt + expirationTime
。
感谢 Jeff Scott Brown 的评论,我设法为我的目的创建了一个自定义 gsp 标签:
class VoucherTagLib {
static returnObjectForTags = ['validUntil']
static namespace = "voucher"
@Value('${voucher.expirationTime}')
Integer expirationTime
GrailsTagDateHelper grailsTagDateHelper
def validUntil = { attrs, body ->
Date reservedAt = attrs.reservedAt
String style = attrs.style ?: "SHORT"
Locale locale = GrailsWebRequest.lookup().getLocale()
if (locale == null) {
locale = Locale.getDefault()
}
def timeZone = grailsTagDateHelper.getTimeZone()
def dateFormat = grailsTagDateHelper.getDateFormat(style, timeZone, locale)
DateTime expirationDateTime = new DateTime(reservedAt)
.plusDays(expirationTime - 1)
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(999)
return grailsTagDateHelper.format(dateFormat, expirationDateTime.toDate())
}
}
虽然这可能不是您要找的答案,但我希望这能对遇到类似问题的其他人有所帮助!