2016-03-24 21 views
1

FormTagLib'u genişletmek için mevcut form etiketlerinin geliştirilmiş bir sürümünü uygulamaya çalışıyorum. textField etiketi ile basit bir test yapmamayı deneyin ama etiket üzerinde hangi yöntemin çağrıldığını bile göremiyorum. Ben mevcut her textField yöntem kullanılabilir geçersiz var ancak bunların hiçbiri Grails: FormTagLib nasıl genişletilir?

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

ben her yöntem için kesme noktaları, konsol çıktıları koyarak denedim ama hiçbir şey olmuyor

kazaya edilmektedir. Giriş alanları iyi oluşturuluyor, ancak kodumu kullanmak için kullanmıyor gibi görünüyor. Heck ben tamamen süper sınıf arama kaldırmayı denedim ve her şey hala çalışıyor.

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

Burada neleri özlüyorum ve metin alanlarının oluşturulmasını nasıl engellerim, böylece değişikliklerimi yapabilirim?

cevap

0

FormTagLib'un nasıl uygulandığına bir göz attınız mı?

Çoğu etiketin, textField = { … } gibi Closures gibi tanımlandığını düşünüyorum. Bu, {} arasındaki kodla değiştirilmesi için textField yönteminin uygulanmasına neden olur.

Örneğinizin, uzantı risklerinin bir kanıtı olduğuna inanıyorum. Bence heyet genellikle daha iyi bir çözümdür. TagLibs'nin bahar fasulyesi olup olmadığından emin değilsiniz, ancak bunun gibi bir şeyi deneyebilirsiniz (test edilmemiştir):

class TestTagLib { 
    def formTagLib 

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