Grails-如何访问域类中的配置值?
尽管以前对于更旧版本的grails曾提出过这样或类似的问题,但我想知道在现代grails 4.0.3的grails域类中,从Grails-如何访问域类中的配置值?,grails,grails-4,Grails,Grails 4,尽管以前对于更旧版本的grails曾提出过这样或类似的问题,但我想知道在现代grails 4.0.3的grails域类中,从application.yml访问配置值的最佳方法是什么 那么,假设我们有一个凭证。groovy类似 class Voucher implements HibernateEntity<Voucher> { ... Date reservedAt static transients = ['validUntil'] Date getValid
application.yml
访问配置值的最佳方法是什么
那么,假设我们有一个凭证。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: 10
...
如何访问我的getValidUntil()
方法中的配置值
编辑
正如@JeffScottBrown在他的评论中提到的,您不应该访问域类中的配置值。因此,我最终与他建议的apporach使用定制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())
}
}
虽然这可能不是你想要的答案,但我希望这能帮助其他有类似问题的人 我留下了一条评论而不是答案,因为这并没有回答您的问题“如何访问域类中的配置值?”。您不应该访问域类中的配置值。出于多种原因,更好的办法是将需要配置的逻辑移动到服务中,并使用
@Value
将配置值注入其中。谢谢,@JeffScottBrown!我的最终目标是在gsp中显示validUntil
日期。访问视图中的配置值,或者通过服务获取凭证
,并在该服务中添加额外的瞬时值,有意义吗?“访问视图中的配置值,或者通过服务获取凭证,并在此服务中添加额外的瞬时值,有意义吗?”-这两个我都不会做。我将把逻辑放在一个定制的GSP标记中,这个标记编写起来非常简单,还可以使用@Value
将配置值注入其中。这将逻辑排除在GSP之外,这是好的。@JeffScottBrown我不认为访问域类中的配置值通常是坏的。是的,通常很少发生,但我可以想象在某些情况下,配置对域的持久化有一定的影响。另外,我不想打破活动记录模式,创建服务只是为了能够获取一些配置值。。。