我刚刚在代码中引入了一个错误,因为我似乎误解了jsp标签生命周期。
该标记在发生错误之前的工作方式是这样的:我将标记的一些集合作为属性传递给它,并将其显示为表格。集合已从控制器传递到JSP。
错误之后:我删除了设置集合的属性。相反,在标记中,我检查集合是否为null,然后从请求中按名称抓取(使用命名约定)。
我没想到的是:最初在标记中设置了集合之后,它在以后的执行中就永远不会为空!在TLD中,它仍被定义为非必需属性。
我 希望 标记在两次执行之间不会保留先前的值。
您自己回答了这个问题- 已汇总。请参阅标签教程,以了解在Java实现中要实现的内容以及从那里链接的页面,其中包含调用序列:
ATag t = new ATag(); t.setPageContext(...); t.setParent(...); t.setAttribute1(value1); t.setAttribute2(value2); t.doStartTag(); t.doEndTag(); t.release();
也就是说,根据API的要求在doEndTag()中重新初始化标签实例。(根据朱利安·克朗格的评论更改,谢谢)
请注意,池化可能与容器有关,但是合法(并且由于API设置,可能在任何地方都可以进行)。