所以我正在尝试实现可用表单标记的改进版本,因此我正在扩展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" />
我在这里缺少什么,如何拦截文本字段的创建,以便我可以进行修改?
答案 0 :(得分:0)
您是否已了解FormTagLib
的实施方式?
我认为大多数代码都定义为封闭,例如textField = { … }
。这导致textField
方法的实现被{}
之间的代码替换。
我相信你的例子证明了延期的风险。我认为代表团通常是更好的解决方案。不确定tagLibs是否是spring bean,但你可以尝试这样的东西(未测试):
class TestTagLib {
def formTagLib
def textField(args) {
formTagLib.textField(args)
}
}