Grails:如何扩展FormTagLib?

时间:2016-03-24 20:47:52

标签: grails taglib

所以我正在尝试实现可用表单标记的改进版本,因此我正在扩展FormTagLib。我尝试用textField标签做一个简单的测试,但我似乎无法弄清楚在标签上调用哪种方法。我已经覆盖了所有可用的textField方法,但没有一个被点击

class TestTagLib extends FormTagLib {
static namespace = "test"

@Override
Object textField(Map attrs) {
    return super.textField(attrs)
}

@Override
Object textField() {
    return super.textField()
}

@Override
Object textField(Map attrs, CharSequence body) {
    return super.textField(attrs, body)
}

@Override
Object textField(Closure body) {
    return super.textField(body)
}

@Override
Object textField(Map attrs, Closure body) {
    return super.textField(attrs, body)
}
}

我已尝试为每种方法设置断点,控制台输出但没有任何反应。生成的输入字段很好,但它似乎没有使用我的代码来完成它。哎呀我甚至尝试完全取消超级班的召唤,一切仍然有效。

<test:textField name="test"/>  
<input type="text" name="test" value="" id="test" />

我在这里缺少什么,如何拦截文本字段的创建,以便我可以进行修改?

1 个答案:

答案 0 :(得分:0)

您是否已了解FormTagLib的实施方式?

我认为大多数代码都定义为封闭,例如textField = { … }。这导致textField方法的实现被{}之间的代码替换。

我相信你的例子证明了延期的风险。我认为代表团通常是更好的解决方案。不确定tagLibs是否是spring bean,但你可以尝试这样的东西(未测试):

class TestTagLib {
    def formTagLib

    def textField(args) {
        formTagLib.textField(args)
    }
}