这几天在resin跑一个taglib(common-controls http://www.common-controls.com/en/index.php)库。发现很多东西不能用。下图中的菜单全部变成了“logout”。其他的全部没有了。
这个页面在tomcat下跑起来的效果是:
怎么会是这样。看上去是不是很奇怪啊。
后来查看了一下cc-samples\WEB-INF\work\_jsp\_jsp\_template下的_header__jsp.java
发现
com.cc.framework.taglib.menu.MenuItemTag这个类只被创建了一次。而且在重复使用。
if (_jsp_MenuItemTag_3 == null) {
_jsp_MenuItemTag_3 = new com.cc.framework.taglib.menu.MenuItemTag();
_jsp_MenuItemTag_3.setPageContext(pageContext);
_jsp_MenuItemTag_3.setParent((javax.servlet.jsp.tagext.Tag)
_jsp_MenuTag_2);
}
于是我就在猜想啊向com.cc.framework.taglib.menu.MenuTag这个类的实例中添加了那么多MenuItem肯定就只加了这么一个实例了。所以在最后显示的只显示出最后设置的参数了。
最后查看有一个仁兄也遭遇了类是的情况。也用blog记录下来了。下面的话就是他的结论:
于同名标签,引用10次,Tomcat就会创建10个方法和标签对象来做对应的处理。而Resin只会创建1个对应的标签实例,如果后面再 引用,则不会创建新的,只操纵唯一的一个实例。所以在标签的逻辑处理中,要注意属性释放和还原的情况。我犯的错误就是因为其中的一个属性一直保存在该实例
中并没有销毁,导致后面再处理的时候发生冲突。
http://b0r0j0.blogbus.com/logs/4028462.html