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);
    }
}

これは実際には、引数を受け取るように変更した他のメソッドの 1 つをほぼ正確にコピーしたものです。これで私が抱えている問題は、エラーメッセージが見つからず、常にデフォルトに戻ることです。msgは常に null です。

msg編集:標準の方法で試してみましたが、常にnullであっても同じです。

4

0 に答える 0