Ola*_*ock 12
你自己回答了这个问题 - 它被汇集了.有关在java实现中实现的内容以及从那里链接的页面,请参阅标记教程,其中包含调用序列:
ATag t = new ATag();
t.setPageContext(...);
t.setParent(...);
t.setAttribute1(value1);
t.setAttribute2(value2);
t.doStartTag();
t.doEndTag();
t.release();
Run Code Online (Sandbox Code Playgroud)
也就是说,根据API的要求,在doEndTag()中重新初始化您的标记实例.(更改为Julien Kronegg的评论,谢谢)
请注意,池化可能取决于容器,但合法(并且,由于API设置,可能在任何地方都可以).
简短的回答:您不应该自己写属性属性.通过这样做,您可以清洁国家的责任.
对于更长的答案,JSP 2.0规范规定了以下内容(第2-51页):
这三个点共同保证属性属性始终正确初始化,同时仍保留默认值(在构造函数或属性声明中定义).作为回报,它只能假设只有容器操作属性属性(通过调用setter).
为了完整起见:
release()不应该用于在标记处理程序的调用之间重置内部状态.它只能保证在GC之前被调用,并且应该用于释放长期资源.doStartTag(),请注意不要覆盖属性,因为此时容器已经调用了setter.doEndTag() 应该可以安全地用于初始化,因为在异常的情况下不应该重复使用标记(参见第2-54页[2])