0

所以我想对错误消息使用标准格式。我不想指定默认代码以外的其他内容。

例子:

domain.property.minSize.notmet=I like purple {?}.

所以我正在遍历我的错误:

domain.errors.fieldErrors.each {
    println g.message(error: it, args: ['bunnies'])
}

这不能正常工作,因为我认为由于默认错误消息已经定义了第一个 x 参数,并且该数字根据错误是什么而变化。如何在不费力知道'?'应该是什么数字的情况下为标准错误代码指定参数?

所以我走了这条路,希望没有更简单的选择。我用我自己的实现覆盖了 messageSource bean,它只是添加了一个方法:

public class MessageSource extends PluginAwareResourceBundleMessageSource implements GrailsApplicationAware, PluginManagerAware, InitializingBean  {

    public final String getMessage(MessageSourceResolvable resolvable, Object[] args, Locale locale)
            throws NoSuchMessageException {

        Object[] arguments;
        if (args == null) {
            arguments = resolvable.getArguments();
        } else {
            arguments = args;
        }
        String[] codes = resolvable.getCodes();
        if (codes == null) {
            codes = new String[0];
        }
        for (String code : codes) {
            String msg = getMessageInternal(code, arguments, locale);
            if (msg != null) {
                return msg;
            }
        }
        String defaultMessage = resolvable.getDefaultMessage();
        if (defaultMessage != null) {
            return renderDefaultMessage(defaultMessage, arguments, locale);
        }
        if (codes.length > 0) {
            String fallback = getDefaultMessage(codes[0]);
            if (fallback != null) {
                return fallback;
            }
        }
        throw new NoSuchMessageException(codes.length > 0 ? codes[codes.length - 1] : null, locale);
    }
}

这实际上几乎是我刚刚修改以接受参数的其他方法之一的精确副本。我遇到的问题是它永远找不到我的错误消息,总是回退到默认值。msg始终为空。

msg编辑:刚刚用标准方法尝试过,总是为空也是如此。

4

0 回答 0