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

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

ExpandedBlockStart.gif ContractedBlock.gif public   void  setBodyContent(BodyContent bodyContent)  dot.gif {
InBlock.gif        
this.bodyContent = bodyContent;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (bodyContent != nulldot.gif{
InBlock.gif            String text 
= bodyContent.getString();
InBlock.gif            System.out.println(
this.hashCode());
InBlock.gif            text 
= text.replaceAll("\n","");
InBlock.gif            System.out.println(text);
InBlock.gif            System.out.println();
InBlock.gif            linkBlock 
= linkBlock.replaceAll("@body", text);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
else dot.gif{
InBlock.gif            linkBlock 
= linkBlock.replaceAll("@body""");
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

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