Расширение пользовательских тегов JSP - PullRequest
5 голосов
/ 30 сентября 2010

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

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

Спасибо.

1 Ответ

3 голосов
/ 02 ноября 2010

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

// 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();
    }
}

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

...