经过我的测试,发现jsp的自定义标签在容器中始终被优化过
当一个标签的属性一样时,只产生唯一一个对象与标签对应
<CSP:Button id="?" css="button">返回首页CSP:Button>
<CSP:Button css="button">关于作者CSP:Button>
<CSP:Button css="button">用户登陆CSP:Button>
于是第二个和第三个标签生成的对象被优化了,成了唯一对象,然后结果就出问题了
<span id="?" class="button">
<a>返回首页a>
span>

<span class="button">
<a>关于作者a>
span>

<span class="button">
<a>关于作者a>
span>

当然我事先做了优化,内部产生代码时没有直接生成
使用了replace方法
之后看来不能这样做
private String startSpan = "";
private String linkBlock = "@body";
private String endSpan = "";

public void setBodyContent(BodyContent bodyContent) {
        
this.bodyContent = bodyContent;
        
if (bodyContent != null{
            String text 
= bodyContent.getString();
            System.out.println(
this.hashCode());
            text 
= text.replaceAll("\n","");
            System.out.println(text);
            System.out.println();
            linkBlock 
= linkBlock.replaceAll("@body", text);
        }

        
else {
            linkBlock 
= linkBlock.replaceAll("@body""");
        }

    }

于是就出现了上面的错误,确实是我的错,没经验导致的,不过这种优化可谓太新颖了,居然为了效率省略掉面向对象的原理 徐徐学习