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