我刚刚在我的代码中引入了一个错误,因为我似乎误解了 jsp 标记生命周期。
该标签在出现错误之前是这样工作的:
我将某个集合作为属性传递给标记,并将其显示为表格。集合从 Controller 传递到 JSP。
错误后:
我删除了设置集合的属性。相反,在标签中我检查集合是否为空,然后从请求中按名称获取它(使用命名约定)。
没想到的是:
在最初在标签中设置集合后,它在后续执行中永远不会变为空!它仍然被定义为 TLD 中的非必需属性。
我预期 在执行之间不保留先前值的标记。
最佳答案
你自己回答了这个问题 - 它是汇集的。见 tag tutorial用于在 java 实现中实现什么,以及从那里链接的页面,包含 invocation sequence :
ATag t = new ATag();
t.setPageContext(...);
t.setParent(...);
t.setAttribute1(value1);
t.setAttribute2(value2);
t.doStartTag();
t.doEndTag();
t.release();
也就是说,按照 API 的要求,在 doEndTag() 中重新初始化您的标签实例。 (在 Julien Kronegg 发表评论时已更改,谢谢)
请注意,池化可能依赖于容器,但非常合法(并且,由于 API 设置,可能在任何地方都进行了)。
关于JSP 标签生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616064/