所以我想对错误消息使用标准格式。我不想指定默认代码以外的其他内容。
例子:
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
编辑:刚刚用标准方法尝试过,总是为空也是如此。