【问题标题】:Extending JSP Custom Tags扩展 JSP 自定义标签
【发布时间】:2011-04-19 12:56:33
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 剪切和粘贴是我知道的唯一方法。
  • 您是否有理由不能将标签定义添加到您正在扩展的 TLD 中?
  • 与您不想直接修改开源项目中的类,而是将其扩展为自定义的原因相同...您希望保持原样。

标签: java jsp jsp-tags


【解决方案1】:

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

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

但恐怕你必须单独配置每个标签类,因为我认为标签库中没有抽象标签定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多