そのため、エラー メッセージには標準形式を使用したいと考えています。デフォルトコード以外は指定したくない。
例:
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);
}
}
これは実際には、引数を受け取るように変更した他のメソッドの 1 つをほぼ正確にコピーしたものです。これで私が抱えている問題は、エラーメッセージが見つからず、常にデフォルトに戻ることです。msg
は常に null です。
msg
編集:標準の方法で試してみましたが、常にnullであっても同じです。