扩展JSP自定义标签
问题描述:
如何扩展现有的JSP自定义标签?扩展JSP自定义标签
如您所知,自定义标签由两部分组成,一个实现类和一个TLD文件。我可以扩展父定制标记的类,但是如何“扩展”其TLD文件?一个明显的解决方案是剪切并粘贴它,然后添加我的东西,但是我想知道是否有像Apache Tile中扩展tile定义那样的更优雅的解决方案。
谢谢。
答
我不认为你可以扩展现有的标签,但类似的方法是使用一个共同的抽象超两个标签实现类:
// 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中没有抽象标签定义。
剪切和粘贴是我知道这样做的唯一方法。 – DwB 2010-09-30 19:39:11
是否有理由不能将您的标记定义添加到您正在扩展的TLD中? – Snekse 2010-09-30 22:27:31
你不想直接从一个开源项目中修改某个类,而是将它扩展到customzie中,这是同样的原因......你想保持原来的状态。 – 2010-09-30 22:37:11