2015-06-09 15 views
7

Basit html etiketleri, gibi dinamik özelliklere sahip bir etikete sahip olmak istiyorum. Böyle şey: Böyle bir şey olmasını istediğiniz jsp etiketindeki dinamik nitelikler

<tags:superTag dynamicAttribute1="value" someOtherAttribute="valueOfSomeOther"/> 

Ve etiketinin benim uygulanmasında

:

Ben bu dinamik nitelikleri eller tarafından yazılmış olacak işaret etmek istiyorum
public class DynamicAttributesTag { 

    private Map<String,String> dynamicAttributes; 

    public Map<String, String> getDynamicAttributes() { 
     return dynamicAttributes; 
    } 

    public void setDynamicAttributes(Map<String, String> dynamicAttributes) { 
     this.dynamicAttributes = dynamicAttributes; 
    } 

    @Override 
    protected int doTag() throws Exception { 
     for (Map.Entry<String, String> dynamicAttribute : dynamicAttributes.entrySet()) { 
      // do something 
     } 
     return 0; 
    } 
} 

jsp, sadece Map olarak ${someMap} gibi geçti. Bunu başarmanın herhangi bir yolu var mı?

+1

, bu TLD'de bir '' etiketi ile yapılabilir. "Jsp dynamic attributes example" için Google size umut vadeden birkaç sonuç verir. – icke

+0

@icke Evet, tam ihtiyacım olan şey bu. Çok teşekkür ederim. Bunu bir cevap olarak ekleyebilir ve kabul edeceğim, ancak gelecekteki okuyuculara da örnek verebilir misiniz? Temel olarak, yalnızca DynamicDavaları arabirimini uygular ve TLD'de etiketini kullanır. –

cevap

4

Sen, TLD dinamik özellikler sağlamak şöyle gerekir:

<tag> 
    ... 
    <dynamic-attributes>true</dynamic-attributes> 
</tag> 

Ve ardından etiket işleyici sınıf DynamicAttributes arabirimini uygulamak zorunda: Ben doğru anlamak

public class DynamicAttributesTag extends SimpleTagSupport implements DynamicAttributes { 
    ... 
    public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { 
     // This gets called every time a dynamic attribute is set 
     // You could add the (localName,value) pair to your dynamicAttributes map here 
    } 
    ... 
}