自定义标签

标签运行时问题:

1. 标签体中间无内容,运行时只执行 doStartTag() -> doEndTag()

2.标签体中间有内容,setBodyContent(),可以把中间体内容先保存到bodyContent当中,在doAfterBody()方法,可以取出bodyContent中标签体的内容.

3.标签体中间有内容,在doEndTag()之前(包括当前方法),必须执行bodyContent.writeOut(bodyContent.getEnclosingWriter())方法,使得标签体内容可以输出到页面上

4.执行方法过程中,return 返回值问题 :

见流程图, 可以看到, 当执行完doStartTag()时,若标签体中有内容

return值为EVAL_BODY_BUFFERED时,则会去执行setBodyContent()->doInitBody()->doAfterBody()流程;

return值为EVAL_BODY_INCLUDE方法则调用doAfterBody()方法;

return值为SKIP_BODY则执行doEndTag()方法.

当执行到doAfterBody()方法时,

return值为EVAL_BODY_AGAIN时,则会重新调用doAfterBody()方法.

当执行doEndTag()方法时,

return值为EVEL_PAGE时,则正常执行页面内容;

return值为SKIP_PAGE时,则将不执行标签体后面的代码,而只显示当前已经解析的HTML页面标签

你可能感兴趣的:(html)