我可以在返回消息条目字符串和参数之前获取 Grails 消息字符串吗?

Posted

技术标签:

【中文标题】我可以在返回消息条目字符串和参数之前获取 Grails 消息字符串吗?【英文标题】:Can I grab Grails messages strings before returning the messages entry string and args? 【发布时间】:2012-07-24 12:48:10 【问题描述】:

显然简化了,但我正在尝试构建一个字符串,我将把它传递给另一个 messages.properties 条目。例如,也许我的条目看起来像这样:

someField.sillyError.good=good
someField.sillyError.bad=bad
someField.validation.error=This has been a [3] morning

使用如下所示的验证:

static constraints = 
    someField(nullable: false, blank: false, validator:  val, obj ->
        def someOtherEntry = g.message(code: 'someField.sillyError.' + val)
        return ['someField.validation.error', someOtherEntry]
    
 

g.message() 的调用不起作用,我似乎也无法使用其他任何东西来获取它。

【问题讨论】:

可能重复:***.com/questions/2814771/… 【参考方案1】:

我有类似的情况,我使用以下代码。

default.mandatory.message=0 is Mandatory
item.error.message=Item #0 - 1



public setItemFieldMandatoryError(FormXItem item, String field, String defaultMessage) 
    def messageSource = Holders.applicationContext.messageSource
    def errorMessage = messageSource.getMessage("default.mandatory.message", [field] as Object[], LocaleContextHolder.getLocale())
    item.errors.rejectValue(field, "formXItem.error.message", [formxItem.itemNumber, errorMessage] as Object[], defaultMessage)

【讨论】:

所以问题是在限制内 messageSource bean 不可用。【参考方案2】:

通过执行以下操作,我能够完成我希望的事情:

messages.properties:

someField.sillyError.good=good
someField.sillyError.bad=bad
someField.validation.error=This has been a [3] morning

someCommand:

def messageSource
static constraints = 
    someField(nullable: false, blank: false, validator:  val, obj ->
        def someOtherEntry = obj.messageSource.getMessage('someField.sillyError' + val, null, Locale.ENGLISH)
        return ['someField.validation.error', someOtherEntry]
    
 

您可以在命令对象级别注入 bean,然后在约束中从 obj 变量调用它。来自同事,所以我不能相信:P

【讨论】:

以上是关于我可以在返回消息条目字符串和参数之前获取 Grails 消息字符串吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 选择两个字符串行之间的所有行

onDelete:在条目被删除之前从条目访问数据

从异步函数返回的承诺中获取价值

如何在核心数据iOS中获取每个实体的最后一个条目

添加参数,如果执行存储过程后没有返回记录,则显示消息

for 循环在 Angular 中的 Observable 之前完成