互换使用EVAL_BODY_TAG和EVAL_BODY_INCLUDE 可以吗

来源:百度知道 编辑:UC知道 时间:2024/05/14 12:01:18
TAGEVAL_BODY_INCLUDE是doStartTag()返回的,而EVAL_BODY_TAG是doAfterBody()返回的,但是下面这段代码的doStartTag()却也返回了EVAL_BODY_TAG,这是正确的做法吗?请阐明。

public int doStartTag()throws JspTagException
{
if(it==null)
return SKIP_BODY;
else
return continueNext(it);
}

public int doAfterBody()throws JspTagException
{
return continueNext(it);
}

public int doEndTag()throws JspTagException
{
try
{
if(bodyContent!=null)
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
catch(java.io.IOException e)
{
}

return EVAL_PAGE;
}
/**
*保护方法,用于把it.next()设置为pagecontext的属性
*/
protected int continueNext(Iterator it)throws JspTagException
{
if(it.hasNext())
{
pageContext.setAttribute(name,it.next(),PageContext.PAGE_SCOPE);
return EVAL_BODY_TAG;
}
else
{
return SK

doStartTag返回值
Tag.SKIP_BODY
主体被忽略
BodyTag.EVAL_BODY_BUFFERED
主体被计算处理
Tag.EVAL_BODY_INCLUDE
主体被显示,但是不对主体进行运算
看看这个你就知道可以分清楚可以用什么了吧?

EVAL_BODY_TAG已被EVAL_BODY_BUFFERED替代
EVAL_BODY_BUFFERED
调用setBodyContent() , doInitBody()
将主体计算后存放在bodyContent中
通过bodyContent.writeOut(bodyContent.getEnclosingWriter());输出

EVAL_BODY_INCLUDE
不调用setBodyContent() , doInitBody()
主体计算后直接输出