3

私はGrailsの初心者なので、私の質問は非常に素朴だと思うかもしれません。g メッセージ タグをオーバーライドしたいと思います。タグの動作に新しい機能を追加してから、ValidationTagLib から元の実装を呼び出したいと考えています。私に関する限り、タグを再定義する独自の taglib を作成できます。G message は ValidationTaglib から実際に messageImpl メソッドを呼び出すクロージャーです。私の質問は、このメソッドをどのように呼び出すことができますか? クロージャーを呼び出すためにこのコードを試しましたが、メッセージの代わりに空のスペースを受け取りました:

class MyTagLib {

    static namespace = "g"

    def message = { attrs ->
        //my changes in tag's behaviour
        def validationTagLib = grailsAttributes.applicationContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib')
        validationTagLib.message.call(attrs)
    }
} 

あなたの助けに感謝します!

4

1 に答える 1

7

Grails ValidationTagLib を拡張する必要があります

import org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib

class MyValidationTagLib extends ValidationTagLib {

    /**
     * Resolves a message code for a given error or code from the resource bundle.
     *
     * @emptyTag
     *
     * @attr error The error to resolve the message for. Used for built-in Grails messages.
     * @attr message The object to resolve the message for. Objects must implement org.springframework.context.MessageSourceResolvable.
     * @attr code The code to resolve the message for. Used for custom application messages.
     * @attr args A list of argument values to apply to the message, when code is used.
     * @attr default The default message to output if the error or code cannot be found in messages.properties.
     * @attr encodeAs The name of a codec to apply, i.e. HTML, JavaScript, URL etc
     * @attr locale override locale to use instead of the one detected
     */
    Closure message = { attrs ->
        //my changes in tag's behaviour
        ValidationTagLib validationTagLib = grailsAttributes.applicationContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib')
        validationTagLib.message.call(attrs)
    }
}
于 2013-02-27T13:07:49.547 に答える