2010-09-30 5 views
4

Как расширить существующий тег JSP?Расширение пользовательских тегов JSP

Как вы знаете, пользовательский тег состоит из двух частей: класса реализации и файла TLD. Я могу расширить класс родительского настраиваемого тега, но как вы «расширяете» его файл TLD? Одно очевидное решение - вырезать и вставлять его, а затем добавлять мои вещи, но мне интересно, есть ли более элегантное решение, например, как вы расширяете определение плитки в Apache Tiles.

Спасибо.

+1

cut and paste - единственный способ, которым я это знаю. – DwB

+0

Есть ли причина, по которой вы не можете просто добавить определение тэгов в TLD, который вы распространяете? – Snekse

+0

По той же причине, что вы не хотите напрямую изменять класс из проекта с открытым исходным кодом, а скорее расширяете его, чтобы настроить его ... Вы хотите сохранить оригинал как есть. –

ответ

2

Я не думаю, что вы можете расширить существующий тег, но подобный подход заключается в использовании общего абстрактного суперкласса для двух меток классов реализации:

// define repetitive stuff in abstract class 
public abstract class TextConverterTag extends TagSupport{ 

    private final long serialVersionUID = 1L; 
    private String text; 

    public String getText(){ 
     return text; 
    } 

    public void setText(final String text){ 
     this.text = text; 
    } 

    @Override 
    public final int doStartTag() throws JspException{ 
     if(text != null){ 
      try{ 
       pageContext.getOut().append(process(text)); 
      } catch(final IOException e){ 
       throw new JspException(e); 
      } 
     } 
     return TagSupport.SKIP_BODY; 
    } 

    protected abstract CharSequence process(String input); 

} 

// implementing class defines core functionality only 
public class UpperCaseConverter extends TextConverterTag{ 
    private final long serialVersionUID = 1L; 

    @Override 
    protected CharSequence process(final String input){ 
     return input.toUpperCase(); 
    } 
} 

// implementing class defines core functionality only 
public class LowerCaseConverter extends TextConverterTag{ 
    private final long serialVersionUID = 1L; 

    @Override 
    protected CharSequence process(final String input){ 
     return input.toLowerCase(); 
    } 
} 

Но я боюсь, вам придется настроить каждый класс тега отдельно, так как я не думаю, что в taglib есть абстрактные определения тегов.

Смежные вопросы