J2EE-12 custom tag自定义标记
初始化函数
setPageContext(PageContext pc)
int doStartTag(){
}
如果返回值是SKIP_BODY的时候就是
EVAL_PAGE:标签里面的内容正常执行,正常的返回值就是这个
一个例子
1.标记处理器:
import java.servlet.jsp.targext.*;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.jsp.*;
import javax.servlet.http.*;
public class IimeTag extends TagSupport{
public int doStartTag()throws JspExpection{
try{
pageContext.getOut().
print(new Date());
}
catch(Exception e){
throw new JspExpection(e);
}
return Tag.EVAL_BODY_INCLUDE;
}
}
2. 分配一个标记
.tld文件:
标记库描述符文件
<tag>
<body-content>JSP</body-content>
标记里面的内容是不是JSP,可为空,此时的标签内部如果有东西就报错
</tag>
JSP指令的语法形式
<%@ taglib uri="/WEB-INF/a.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/b.tld" prefix="b" %>
<a:time>
</a:time>
<b:time>
</b:time>
用来区分相同名字的标签
JSP传递数据
jsp向标记处理器传递程序
<rtexprvalue>:对属性值进步进行解析 一般是true,即进行动态解析
eg <a:time place:"${place}">
标记处理器想JSP回传一个脚本变量
<%
int i = 5;
Student s = new Student();
%>
<t:time/>
<%=d%>
d由time标记生成
TagExtraInfo
public VariableInfo{
变量信息:变量名称,变量类型
}
AT_BEGIN
标签的开始标记到JSP结束
AT_END
在标签的结束开始到JSP的最后
NESTED
标签内部使用,离开就不能使用
Eg:
在jsp转换为java代码的时候执行上面的代码
变量的赋值
在doStartTag中:
pageContext.setAttribute("d",new java.util.Date());
在JSP中使用
jsp中的变量应该由JSP程序员来指定
jsp页面中:
<t:time var = "d" type="java.util.Date"/>
在doStartTag()中
simpleTag
初始化
setJspContext()
setJspBody()
getJspContext()
getJspBody()
invoke()
执行代码片段,输出到out对象中
作业:
看
simpleTag bodyTag intetationTag
API