扩展JSP自定义标记

时间:2010-09-30 19:12:43

标签: java jsp jsp-tags

如何扩展现有的JSP自定义标记?

如您所知,自定义标记由两部分组成,即实现类和TLD文件。我可以扩展父自定义标记的类,但是如何“扩展”其TLD文件?一个明显的解决方案是剪切并粘贴它然后添加我的东西,但我想知道是否有一个更优雅的解决方案,就像在Apache Tiles中扩展tile定义的方式。

感谢。

1 个答案:

答案 0 :(得分:3)

我不认为你可以扩展现有的标签,但类似的方法是为两个标签实现类使用一个共同的抽象超类:

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

但是我担心你必须单独配置每个标记类,因为我认为taglibs中没有抽象的标记定义。