不管高手低手,近来看下!
最近研究了三天taglib,就胡鼓弄出了个程序,看看结果实在不明白输出顺序为什么那样,那位给解析解析!分不多,就当研究研究!
类:
package tag.iteration;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class Itefor extends BodyTagSupport
{
private int val;
public int doStartTag() throws JspTagException
{
val=1;
for(int i=0;i<5;i++)
{
try
{
pageContext.getOut().print(val);
}
catch (IOException e)
{
}
}
return EVAL_BODY_BUFFERED;
}
public int doAfterBody() throws JspTagException
{
val=val+1;
BodyContent bc=getBodyContent();
try
{
bc.print("<h2>We're in doAfterBody()</h2>"+val);
}
catch (IOException e)
{
}
String str=bc.getString();
bc.clearBody();
for(int i=0;i<5;i++)
{
try
{
getPreviousOut().print(str);
getPreviousOut().print(val);
}
catch (IOException e)
{
}
}
return SKIP_BODY;
}
}
JSP:
<%@ taglib uri="WEB-INF/tlds/goforit.tld" prefix="goforit" %>
<goforit:for>
Helldsdo<br>
</goforit:for>
结果:
11111 Helldsdo
We're in doAfterBody()
22 Helldsdo
We're in doAfterBody()
22 Helldsdo
We're in doAfterBody()
22 Helldsdo
We're in doAfterBody()
22 Helldsdo
We're in doAfterBody()
22
问题点数:20、回复次数:3Top
1 楼cnfalcon(中国猎鹰)回复于 2004-12-02 19:29:21 得分 20
<goforit:for>到这里首先调用doStartTag()显示11111,然后显示Helldsdo<br>
</goforit:for>到这里开始tag结束调用doAfterBody(),显示以下的内容.Top
2 楼ccedcj19(扬子鳄)回复于 2004-12-03 09:50:42 得分 0
我就是对doAfterBody()里显示内容有疑惑啊?!
我本来认为应该显示"<h2>We're in doAfterBody()</h2>"+val 一回,
然后Helldsdo,2各五次,且Helldsdo应该在前面,但是显示出来一看完全不是那么回事。
也怪我,没说清楚。Top
3 楼ccedcj19(扬子鳄)回复于 2004-12-06 09:35:04 得分 0
很差劲Top




