简单标签
实现了SimpleTag接口的标签通常成为简单标签
setJspContext方法:用于把jsp页面的pageContext对象传递给标签处理器对象,从而通过pageContext对象获得web编程中的其他的八个内置对象(request、response、….)
setParent方法:用于把父标签处理对象传递给当前标签处理器对象
getParent方法:用于获得当前标签处理器对象的父标签
setJspBoay方法:用于把代表标签体的fragment对象传递给比群殴前处理器对象
dotage方法:用于完成所有的标签逻辑,包括输出、迭代、修改标题内容等。
在此方法中可以跑出javax.jspSkipPageException异常,用于通知web容器不再执行jsp页面中位于结束标记或面的内容,这等小雨传统标签的doEndTag、方法中返回Tag.SKIP_AGE敞亮的情况。
JspFragment类
·此类的实例代表一段符合jsp语法的jsp代码,这段代码
中不能包含脚本元素
·weeb容器在处理简单标签时,会把标签内容用一个jspfargment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象,
JspFragment类中只定义了两个方法:
getJspContext方法、invokie(java.io.Writer out)
invoke方法详解
简单标签的应用
1、 利用简单标签完成自定义标签以后的jsp页面是否进行显示
创建一个标签处理器
//利用自定义标签完成标签以后的内容是否显示
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
//JspFragment jf=this.getJspBody();//获取标签体
//处理标签体
//jf.invoke(null);//到客户端显示,如果没有标签体这句话可能会抛异常
throw new SkipPageException();//利用此异常来控制是否显示自定义标签以后的jsp页面
}
在tld中进行描述
<tag>
<name>demo7</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo7</tag-class>
<body-content>scriptless</body-content>
</tag>
2、 利用简单标签完成迭代
创建一个标签处理器
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspFragment jf=this.getJspBody();
for(int i=0;i<count;i++){
jf.invoke(null);
}
}
增加一个属性:count
private int count;//要和jsp中的属性名称一致
public void setCount(int count) {
this.count = count;
}
在tld文件中进行描述
<tag>
<name>demo8</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo8</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3、 简单标签控制标签体的内容进行修改
编写处理器
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspFragment jf=this.getJspBody();//获取标签体内容
StringWriter sw=new StringWriter();//得到一个流对象
jf.invoke(sw);//将标签体的内容写入到流中
String content=sw.toString().toUpperCase();//大小写进行转换
JspWriter jw=this.getJspContext().getOut();//获取到输出流
jw.write(content);//将转换后的内容输出
}
Tld文件描述
<tag>
<name>demo9</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo9</tag-class>
<body-content>scriptless</body-content>
</tag>
二、带属性的标签
<csdn:demo8 count=”9”>
</csdn:demo8>
标签处理器中一定也得包含一个私有的属性count和setter方法(给属性赋值)
Dotage方法包含业务逻辑代码
Tld文件中
<Tag>
<name></name>
<tag-class></tad-class>
<body-content></body-content>
<attirbute>
<name></name>
<requeired></requeired>//是否是必须的
<rtexprvalue></rtexprvalue>//是否可以为el表达式运行时表达式计算:<csdn:demo count=”${date}”>或者是<%=date+1%>
</attribute>
</Tag>